VC++线程的创建和关闭
来源:互联网 发布:淘宝推荐系统 编辑:程序博客网 时间:2024/05/01 10:56
线程的创建
声明: static HANDLE thread = NULL;
创建: thread = CreateThrad(NULL, 0, 函数指针, NULL(指针参数), 0, NULL);
线程的关闭
直接用CloseHandle是不能关闭线程的,而是用来关闭句柄的,这里可能不像new和delete那样用。
我今天下午突然发现了我自己写的一个demo的一个BUG,那就是线程无法关闭,导致线程函数可能会去操作已经被销毁的变量,然后就会报错。
然后我在一个帖子(传送门)里找到了解决方法。
大概的意思就是通过一个变量来告诉线程你可以关闭了(针对死循环线程),我对windows编程没什么太多研究,说法可能不太严谨
声明一个变量:
static HANDLE thread_exit = CreateEvent(NULL, TRUE, FALSE, NULL); // 原子量,用于控制线程结束
线程函数里面的写法:
static DWORD WINAPI recvFrom(PVOID psock) {CSocket *socks = (CSocket*)psock;//MessageBox(NULL, _T("test"), NULL, NULL);while (WaitForSingleObject(thread_exit, 0) != WAIT_OBJECT_0) {char buf[256] = { 0 };socks->Recvfrom(buf);printf("%s\n", buf);if (!socks->getRecvList()->find(buf)) {Node *tmp = new Node(&socks->getClient_addr(), buf, NULL);//WaitForSingleObject(Mutex, 500);socks->getRecvList()->push(tmp);//ReleaseMutex(Mutex);Sleep(1000);}//std::cout << (messages->empty() ? "空" : "不空") << std::endl;//Sleep(1000);}return 0;}
最关键的是这句:
while (WaitForSingleObject(thread_exit, 0) != WAIT_OBJECT_0) {
然后就是正确的关闭方式:
if (WaitForSingleObject(thread, 100) == WAIT_TIMEOUT) {TerminateThread(thread, 0);}
最后别忘了回收句柄:
CloseHandle(thread);
大功告成
0 0
- VC++线程的创建和关闭
- vc 线程创建关闭
- vc 线程创建关闭
- vc 线程创建关闭
- vc 线程创建关闭
- vc 线程创建关闭(彻底讲解)
- vc 线程的创建,暂停和结束
- vc 线程的创建,暂停和结束
- vc 线程的创建、暂停和结束
- vc 线程的创建、暂停和结束
- VC++关闭线程的问题
- MFC中如何安全的创建和关闭线程
- VC中线程的创建
- vc 创建线程的方法
- vc创建一个线程和销毁的方法
- VC创建定时关闭的MessageBox
- VC模态对话框和非模态对话框的创建和关闭
- 用VC创建进程和线程
- 字符串比较
- HDU2546饭卡
- Android实现硬盘缓存
- Linux锁机制
- MPEG2-TS音视频同步原理
- VC++线程的创建和关闭
- 自定义ViewGroup
- java使用redis缓存(String,bean,list,map)
- jquery.superslide.js使用方法
- (shell)表空间监控
- browserify
- 哈理工第六届程序设计团队赛 G ox
- C程序设计语言第一章代码抄写
- Problem-2036 改革春风吹满地