线程的创建与终止
2016-09-23 10:50
260 查看
这几天在windows和android平台上都使用了线程,虽然实现的很简单,但还是因为不熟悉导致了一些crash
Tips:
1 线程里不要对成员变量赋值,并用这个赋值作为线程终止条件;
2 在关闭线程的时候,需要等待线程终止,也就是说必需满足线程函数终止条件,没有条件要创造条件;
3 在CreateProc的时候有个默认参数是分配内存大小,以前有遇到过默认内存不够的情况,需要改变这个值。
windows
创建线程
线程函数
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; } }
相关文章推荐
- 【转帖】在内核模式下创建和终止线程
- 如何:创建和终止线程(C# 编程指南--MSDN)
- 多线程编程-线程的创建和终止
- Linux 线程(创建/等待/终止)
- Windows线程的创建和终止
- 【转】C# 创建 终止线程
- 如何:创建和终止线程(C# 编程指南)
- 多线程编程-线程的创建和终止
- 多线程编程-线程的创建和终止
- linux基础编程:多线程基础总结:线程创建 终止 线程同步/互斥量/条件变量/信号灯
- 创建和终止线程的好方法
- asp.net 创建和终止线程(多线程)
- 如何创建和终止线程(转载自MSDN)
- 如何:创建和终止线程(C# 编程指南)
- 转帖】在内核模式下创建和终止线程 收藏
- .NET多线程技术详解(2) 创建、终止线程
- 在内核模式下创建和终止线程
- 多线程编程-线程的创建和终止
- pthread线程的终止退出 | 线程的大量创建
- 线程的创建与终止