2013-08-02 69 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