辅助线程安全退出
2011-05-06 08:53
274 查看
在日常中,我们经常需要用到辅助线程,那么在程序退出时一定要先保证辅助线程已安全退出,因为在程序销毁时很多资源也被销毁掉了,那么如果这时辅助线程要用到某些资源已不存在了,就可能发生不可预料的后果(一般是程序崩溃)。怎么让辅助线程安全退出呢?直接贴代码吧:
成员变量/线程函数声明:
OnInitDialog中初始化:
辅助线程主体:
退出时设置退出信号,等待
原因:m_hThread只有在辅助线程退出后才能变得有信号.
成员变量/线程函数声明:
HANDLE m_hThread; HANDLE m_hThreadEvent[2]; static DWORD WINAPI Thread(LPVOID lpvoid);
OnInitDialog中初始化:
m_hThreadEvent[0] = CreateEvent(NULL, FALSE, FALSE, NULL); // event m_hThreadEvent[1] = CreateEvent(NULL, FALSE, FALSE, NULL); // exit event m_hThread = CreateThread(NULL, 0, Thread, this, 0, NULL);
辅助线程主体:
DWORD WINAPI XXX::Thread(LPVOID lpvoid) { CCCDateTimeDemoDlg *pthis = (CCCDateTimeDemoDlg*)lpvoid; BOOL bContinue = TRUE; DWORD dwRes = 0; while (bContinue) { dwRes = WaitForMultipleObjects(2,pthis->m_hThreadEvent, FALSE, INFINITE); switch (dwRes) { case WAIT_OBJECT_0: { //做你需要的操作 } break; case WAIT_OBJECT_0 + 1: { bContinue = FALSE; } break; default: { bContinue = FALSE; } break; } } return 0; }
退出时设置退出信号,等待
SetEvent(m_hThreadEvent[1]);//设置退出信号量 WaitForSingleObject(m_hThread, INFINITE); CloseHandle(m_hThread); CloseHandle(m_hThreadEvent[0]); CloseHandle(m_hThreadEvent[1]);
原因:m_hThread只有在辅助线程退出后才能变得有信号.
相关文章推荐
- 24.VC(custom)-辅助线程安全退出( 双Event)
- java 安全退出线程详解
- Linux下如何安全退出线程
- 主线程等待一个 无阻塞函数 死循环子线程的安全退出
- linux下 c中怎么让才能安全关闭线程 和 linux线程退出时执行的程序(线程清理处理程序)简单例子
- FreeLibraryAndExitThread DLL中线程的安全退出
- 安全退出线程方法
- [java多线程]如何安全的退出线程
- 多线程编程之线程安全退出
- 线程的安全退出
- FreeLibraryAndExitThread DLL中线程的安全退出
- Java多线程编程安全退出线程方法介绍
- java 安全退出线程详解
- FreeLibraryAndExitThread DLL中线程的安全退出
- 多线程编程之线程安全退出(原创)---by cacorot
- 转:FreeLibraryAndExitThread DLL中线程的安全退出
- 转:FreeLibraryAndExitThread DLL中线程的安全退出
- 多核计算与程序设计 - 03 基础知识 之三 线程的安全退出
- windows核心编程之使用线程APC回调安全退出多个等待线程
- Microsoft.Practices.Unity 的一个线程安全Bug浅析