VC2012 多线程
来源:互联网 发布:上海博物馆淘宝 编辑:程序博客网 时间:2024/03/29 23:31
一 工作者线程和用户界面线程
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。
所以不要在工作者线程中做用户事件响应也不要做其他界面操作 .
二 CreateThread()
HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, //子进程能否继承这个线程句柄 _In_ SIZE_T dwStackSize, //线程栈大小 _In_ LPTHREAD_START_ROUTINE lpStartAddress, //线程函数名称 _In_opt_ LPVOID lpParameter, //传入线程函数的参数 _In_ DWORD dwCreationFlags, //0:立即启用新线程, CREATE_SUSPENDED:挂起 _Out_opt_ LPDWORD lpThreadId); //保存新线程的ID号 DWORD WINAPI MyThreadFunction( LPVOID lpParam );HANDLE hThreadArray;DWORD dwThreadIdArray;hThreadArray = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadFunction, "param",0,&dwThreadIdArray); if (hThreadArray[i] == NULL) { ExitProcess(3); }// Wait until all threads have terminated. WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);TerminateThread(hThreadArray,0);CloseHandle(hThreadArray);hThreadArray = NULL;
注意: 线程函数必须是全局函数或者静态函数, 否则会提示类型转换错误.
WaitForMultipleObjects()等待线程结束
三 退出
1 线程结束//调用析构函数,释放线程栈,线程内核对象减一 .总之很完美
2 ExitThread(dwExitCode) 线程中调用此函数退出
3 TerminateThread(hThreadArray); 线程调用此函数结束其他线程 ,用TerminateThread结束的线程系统会保留线程栈以便其他线程访问.
四 互斥对象
使用互斥对象保证只有一个进程运行
//Check and create mutex.m_hMutex = CreateMutex(NULL, FALSE, UTILITY_NAME);//互斥对象用来多线程访问共享资源if(m_hMutex==NULL){MessageBox(_T("創建互斥對象失敗!!"),UTILITY_NAME,MB_OK|MB_ICONINFORMATION);CloseHandle(m_hMutex);EndDialog(1);return FALSE;}if(GetLastError() == ERROR_ALREADY_EXISTS){MessageBox(TEXT("本程序已經在運行!!"),UTILITY_NAME,MB_OK|MB_ICONINFORMATION);CloseHandle(m_hMutex);EndDialog(1);return FALSE;}
- VC2012 多线程
- 解决 VC2012 ATL 多线程调用 报错:E_UNEXPECTED Catastrophic failure.
- vc2012编译thrift
- VC2012 学习记录
- VC2012换字体问题
- VC2012编译CEF3
- VC2012 正则替换
- pclint vc2012配置
- VC2012学习笔记(控件)
- VC2012安装Opengl开发环境
- VC2012 小助手的破解
- VC2012编译protobuf出错处理
- vc2012 异常捕获并处理
- VC2012 ActiveX 控制台打印调试
- vc2012/2015 编译使用directshow
- VC2012内存泄漏检测工具Visual Leak Detector
- vc2012配置boost公共环境(取巧)
- vc2012模拟鼠标键盘操作事件
- ASP.NET Grid数据导出到Excel
- 【rmzt:天使的向往win7主题】
- css hack
- Prevent Restore◆v4.0.1中文安装版【专为彻底删除文件】
- tomcat优化
- VC2012 多线程
- 修改initrd.lz文件内容及其解压和压缩方法
- java计算两个日期相差多少天
- Citrix XenApp6.5 另类发布文档
- poj2676解题报告
- •质量计划和缺陷估计 •质量管理的流程化方法
- Android开发中如何给EditText设置多行效果
- log4j配置(二):在web项目中配置log4j
- 单链表操作