作者DrStein (啤酒肚)
看板C_and_CPP
標題[問題] 請問兩thread如何傳遞進度?
時間Wed Nov 23 17:31:56 2011
開發平台(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