您的位置:首页 > 其它

线程的创建与终止

2016-09-23 10:50 260 查看
这几天在windows和android平台上都使用了线程,虽然实现的很简单,但还是因为不熟悉导致了一些crash

Tips:
1 线程里不要对成员变量赋值,并用这个赋值作为线程终止条件;

2 在关闭线程的时候,需要等待线程终止,也就是说必需满足线程函数终止条件,没有条件要创造条件;
3 在CreateProc的时候有个默认参数是分配内存大小,以前有遇到过默认内存不够的情况,需要改变这个值。
windows 

创建线程 

m_hPreviewShowThread = ::CreateThread(NULL,0,PreviewShowProc,this,0,NULL);
if(!<span style="font-family: Arial, Helvetica, sans-serif;">m_hPreviewShowThread</span>)
{
//线程启动失败
hr = E_FAIL;
LOG_ERR(L"VideoService Create PreviewShowProc Thread failed.");
}


线程函数

DWORD WINAPI VideoService::PreviewShowProc(LPVOID lp)
{
HRESULT hr = S_OK;
LOG_INFO(L"PreviewShowProc start.");
VideoService *pVideoService = (VideoService *)lp;
CHECK_IF_NULL(pVideoService);

while(1)
{
if(pVideoService->m_previewRenderCallback->m_frameCnt>=1)
{
LOG_INFO(L"preview received data");
pVideoService->NotifyToShowPreviewWindow(TRUE);
break;
}

if(!pVideoService->m_bPreviewed)
break;

Sleep(50);
}
LOG_INFO(L"PreviewShowProc end.");
exit:
return 0;
}
线程终止
if(m_hPreviewShowThread!=NULL)
{
DWORD dRet = WaitForSingleObject(m_hPreviewShowThread,WAITTHREAD_TIMEOUT);
if(dRet == WAIT_OBJECT_0)
{
LOG_INFO(L"VideoService preview monitor wait thread to exit successfully");
CloseHandle(m_hPreviewShowThread);
m_hPreviewShowThread = NULL;
m_previewRenderCallback->m_frameCnt = 0;
}
else
{
LOG_ERR(L"wait preview monitor thread exit failed with error:[%d]",dRet);
hr = E_TANG_VIDEO_WAIT_THREAD_FAILED;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows线程 pthread