2013-08-02 273 views
0

我正在运行2线程的应用程序。一个线程保存从相机抓取的图像,另一个线程处理该图像,这里的问题是,处理过程中的线程停止(停顿或阻塞无法获取它)在一些(每次运行时随机)小时后处理,但它在i3上使用windows7以及在使用windowsXp的双核处理器上工作良好。两个线程中都没有关键部分或锁定。请帮我解决这个问题。从线程2i7处理器与Windows8操作系统的多线程问题操作系统

代码:

fn_Waitforfiles(); // while loop waits until the 4 images saved in watch folder if not it will return at count of 50 
    CString strLog = ""; 
    strLog.Format("Entering Skipping.."); 
    for(int d = 1; d <= m_iInterLeave; d++) 
    { 
    m_ifileCount++; 
    m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount); 
    if(PathFileExists(m_strcurFilePath)) 
    ::DeleteFile(m_strcurFilePath); 
    else 
    { 
    m_ifileCount--; 
    m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount); 
    } 
    if(d == m_iInterLeave) 
    { 
    m_ifileCount++; 
    m_strcurFilePath.Format("%s\\%lu.jpeg", m_strToProcessDir, m_ifileCount); 
    } 
    } 
    strLog = ""; 
    strLog.Format("Skipped %d images on Interleaving..", m_iInterLeave); 
    MSSLOGGER::WriteLog(_T(strLog)); 

写日志后“回车跳过。”线程2没有更多的跑动

+4

欢迎来到Stack Overflow。如果您可以分享您的代码,那么专家能够更好地为您提供帮助(最好是一个简单示例)。另外,详细说明你已经做了什么来调试问题。如果处理停留在一个线程上,是否尝试过使用调试器来确定问题所在? (或者其他的调试)? – selbie

+0

项目运行的方式是, 线程1:从相机 抓取图像 将图像保存路径 //继续进行,直到停止掠 线程2: 检测运动在保存的图像 跳过两个图像,如果没有检测到 运动/ /继续,直到没有更多的图像。 Thread2停止处理我们无法调试,因为它发生在我们无法访问的客户机中 – venki

+0

如果我们要帮助您,您将需要显示代码,因为您对该过程的解释有太多漏洞。例如,你说没有锁,那么图像如何在线程之间传输?当你说有2个线程时,真的只有2个线程永远不会完成,或者你是否定期启动一个新线程,并假设前一个线程已关闭。向我们展示代码可能会回答这些问题以及无疑会出现的其他问题。 – Nanhydrin

回答

1

线索可能是“文件夹中观看图像”。这听起来像您依赖文件更改通知,并且可能会错过这些通知(更准确地说,它们中的一些可能会合并为一个摘要通知)。

+0

我总是从1开始保存无符号长图像;并通过该数字观看图像;两个线程都有独立的变量来保持文件数量也thread1总是会提前3个文件计数 – venki

+0

@venki:我不明白你的意思。当然,你可以预测新文件的_name_,但不会出现_when_。 – MSalters

+0

我将等到该文件出现。 – venki