看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) windows就好 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 用了openCV當顯示函數 問題(Question): 是這樣的 開啟了兩個線程,一個在讀YUV資料,並轉為RGB格式 另個線程就一直調用openCV做顯示 : 程式中比較重要的部份就這兩個函數(兩個線程的主函數) DWORD WINAPI GetDataLoop(LPVOID lpParam) { param *m_pPara; m_pPara = (param*)lpParam; unsigned int graySize; graySize = m_pPara->width*m_pPara->height; int sts; while(1) { sts = ReadDataFromHardDisk(m_pPara->pYUV, m_pPara->fp, m_pPara->width, m_pPara->height); if( -1 == sts) break; YUV420toRGB(m_pPara->pYUV, m_pPara->pYUV + graySize, m_pPara->pYUV + graySize*5/4, m_pPara->width, m_pPara->height, m_pPara->pRGBAImage->imageData, BGRA); }/*while*/ return 0; }/*ReadHDLoop*/ DWORD WINAPI RenderingLoop(LPVOID lpParam) { param *m_pPara; m_pPara = (param*)lpParam; int cnt = 0; while(1) { DWORD ExitCode; GetExitCodeThread(m_pPara->getDataThread, &ExitCode); if(STILL_ACTIVE != ExitCode) break; printf("%d frame\n", cnt++); cvShowImage("Image", m_pPara->pRGBAImage); cvWaitKey(1); } return 0; }/*RenderingLoop*/ 現在我想做的是 一張圖只被顯示一次 也就是 GetDataLoop這線程中,調用YUVtoRGB後, 可以發個訊號給 RenderingLoop,而RenderingLoop在沒收到這訊號前 ,是不可以調用cvShowImage的(好比只能等待這類的) 反之,在cvShowImage還沒節束前,GetDataLoop這線程不能調用 YUV420toRGB ( 會寫同一塊緩衝) 簡單講就是線程間的通信,最簡單的作法當然是用 static isLocked來作 那請問有沒有較制式或標準的作法或API呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.251.134.25
ljhgc:WaitForSingleObject 11/23 18:20
ljhgc:可以等線程結束 11/23 18:21