[問題] 請問兩thread如何傳遞進度?

看板C_and_CPP (C/C++)作者 (啤酒肚)時間14年前 (2011/11/23 17:31), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/2 (看更多)
開發平台(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

11/23 18:20, , 1F
WaitForSingleObject
11/23 18:20, 1F

11/23 18:21, , 2F
可以等線程結束
11/23 18:21, 2F
文章代碼(AID): #1EpBsEoM (C_and_CPP)
文章代碼(AID): #1EpBsEoM (C_and_CPP)