C++线程安全退出
HANDLE m_EvtThreadExit[MaxVisionNum]; //定义 方法一 for(int i=;i<MaxVisionNum;i++) m_EvtThreadExit[index] = CreateEvent(NULL,false,false,NULL); //手动创建 //线程函数 UINT CMilTestDlg::VisionThread(LPVOID param)
{
TThreadParam * pParam = (TThreadParam *)param;
CMilTestDlg * pDlg = (CMilTestDlg *)(pParam->pThis);
int visionIndex = pParam->visionIndex;
pDlg->VisionProcess(visionIndex); SetEvent(m_EvtThreadExit[index]); //线程函数最后,设置事件
return ;
} 方法二 for (int i=;i<MaxVisionNum;i++)
{
threadParma[i].pThis = this;
threadParma[i].visionIndex = i;
CWinThread *pthread = AfxBeginThread( VisionThread, &(threadParma[i]), THREAD_PRIORITY_NORMAL, ,
CREATE_SUSPENDED );
pthread->m_bAutoDelete = false; ////关闭句柄自动删除
m_EvtThreadExit[i] = pthread->m_hThread; //关联CWinThread句柄
pthread->ResumeThread(); } 方法三 for (int i=;i<MaxVisionNum;i++)
{
threadParma[i].pThis = this;
threadParma[i].visionIndex = i;
m_EvtThreadExit[i] = CreateThread(NULL,,ThreadProc,&(threadParma[i]),,NULL); //关联句柄
} DWORD WINAPI ThreadProc(LPVOID lpParam)
{
TThreadParam * pParam = (TThreadParam *)lpParam;
CMilTestDlg * pDlg = (CMilTestDlg *)(pParam->pThis);
int visionIndex = pParam->visionIndex;
pDlg->VisionProcess(visionIndex);
return ;
} /*****************************通用 **************************************/
//判断退出, void CMilTestDlg::DoEvents()
{
MSG msg;
while (::PeekMessage(&msg,NULL,,,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} void CMilTestDlg::WaitAllThreadExit(DWORD time)
{
DWORD t=::GetTickCount();
while(::GetTickCount() -t < time)
{
DoEvents(); //这个很关键,否则线程与UI相关时,会卡在里面
//线程同步的两个比较重要的函数为WaitForSingleObject()和WaitForMultipleObjects(),具体使用请参考MSDN。这两个函数都是阻塞函数,一直等待授信的对象发生才返回。
int ret = WaitForMultipleObjects(MaxVisionNum,m_EvtThreadExit,true,);
if(ret == WAIT_OBJECT_0)
{
break;
}
}
TRACE("cost (ms): %d\n",GetTickCount() - t);
}
C++线程安全退出的更多相关文章
- UNIX环境高级编程——主线程与子线程的退出关系
		我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1. 主线程等待新线程先结束退出,主线程后退出.正常执行. 示例代码: #include & ... 
- Qt多线程学习-用例子来理解多线程(转),这个是我看过最好的文章,总结很详细(感觉exec()的作用就是保持线程不退出,这样方便随时处理主线程发来的信号,是一种非常别致的思路)good
		01 class MThread :public QThread 02 { 03 public: 04 MThread(); 05 ~MThread(); 06 virtual ... 
- 关于Java线程意外退出自动重启..
		最近做项目使用到第三方推送功能,然后创建了一个线程用来循环读取队列中的数据,当队列为空时,则线程暂停2秒.一切都像想象中的辣么美好.可是在后面的测试中发现收不到推送的消息了,接着发现了原来推送的线程由 ... 
- 主线程用afxBeginThread()创建多个线程安全退出的办法
		HANDLE hand[]; CCriticalSection m_crisecoin; CEvent m_event; struct Student { int nNO; int nYear; CW ... 
- windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题
		可能是显卡驱动程序版本太高了,退回到以前的版本就ok了. 第一次遇见这个问题可把我给整疯了!! 后来又遇到一次,参考之前的解决方法,很快就搞定了!! 可见,经验可是很重要的一个东西啊. 
- C#屏蔽Alt+F4,解决Alt+F4关闭窗体时对话框NO后,线程不退出问题
		//1.将窗体的属性KeyPrieview设置为true //keypreview属性为true的时候,就可以响应键盘事件v //2.在窗体KeyDown事件中加如下代码 private void F ... 
- AutoResetEvent信号锁  waitone  set  执行一次线程退出 挺不爽的地方
		下边有个 循环调用线程写奇偶数的程序 class TheadTest { //定义一个Stream对象接收打开文件 private FileStream st; //构造方法 public Thead ... 
- Linux多线程(二)(线程等待,退出)
		1. 线程的等待退出 1.1. 等待线程退出 线程从入口点函数自然返回,或者主动调用pthread_exit()函数,都可以让线程正常终止 线程从入口点函数自然返回时,函数返回值可以被其它线程用pth ... 
- windows主线程等待子线程退出卡死问题
		在windows下调用_beginthread创建子线程并获得子线程id(函数返回值),如果子线程很快退出,在主线程中调用WaitForSingleObject等待该线程id退出,会导致主线程卡死.需 ... 
随机推荐
- Linux就该这么学 20181011(第十五章邮件)
			参考链接:https://www.linuxprobe.com. https://www.linuxprobe.com/chapter-15.html 电子邮箱系统 foxmail MUA 发送 MT ... 
- BZOJ 3052 树上带修莫队
			思路: 就是把带修莫队移到了树上 块的大小开到(n^2/3)/2 比较好- 这是一个卡OJ好题 //By SiriusRen #include <cmath> #include <c ... 
- MVC bundle配置文件模板
			bundle文件放在应用根目录,命名为 bundle.config 内容模板 <?xml version="1.0" encoding="utf-8"? ... 
- layui序章
			layui,layer,laydate关系图,layer和laydate作为layui的独立模块存在 下载地址:layer.layui.com 
- Android GreenDao 使用教程
			上一篇 总结了grendao 环境搭建以及简单的增删查改,接下来将全面解析框架的使用,基于上篇的orm模型(Note)数据库讲解 GreenDao的插入: 插入的方式有很多: daoSession.g ... 
- vue-cli  webpack配置中  如何启动less-loader sass-loader
			在vue-cli中构建的项目是可以使用less的,但是查看package.json可以发现,并没有less相关的插件,所以我们需要自行安装. //第一步:安装 npm install less les ... 
- PhotoZoom的工具栏 图片放大不失真
			使用PhotoZoom能够对数码图片无损放大,备受设计师和业内人员的青睐,它的出现时一场技术的革新,新颖的技术,简单的界面,优化的算法,使得它可以对图片进行放大而没有锯齿,不会失真.本文为您一起来认识 ... 
- css3动画机制原理和实战
			这段时间喜欢上css3动画效果了,关于这个每个人都有不同的看法,在我个人看来css3在做一些小页面的动画效果还是很好用的,一些简单的小动画要是用js的话,未免浪费. 要是做大一点的话最好js+css3 ... 
- NTP同步底层实现
			RFC http://www.ietf.org/rfc/rfc5905.txt https://www.eecis.udel.edu/~mills/ntp/html/select.html https ... 
- Vue学习之路第六篇:v-on
			v-on指令用来触发页面事件的指令. <body> <div id="app"> <button v-on:click="show()&qu ... 
