win32多线程 (一) 线程创建与结束等待
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI ThreadFuncFirst(LPVOID param)
{
int iCount = 50;
while(iCount--){
cout<<"\nThreadFuncFirst:"<<iCount;
}
return 0;
}
DWORD WINAPI ThreadFuncSecond(LPVOID param)
{
int iCount = 50;
while(iCount--){
cout<<"\nThreadFuncSecond:"<<iCount;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD dwThreadID = 0;
HANDLE handleFirst = CreateThread(NULL, 0, ThreadFuncFirst, 0, 0, &dwThreadID);
if (!handleFirst)
{
cout<<"create thread 1 error:"<<endl;
}
HANDLE handleSecond = CreateThread(NULL, 0, ThreadFuncSecond, 0, 0, &dwThreadID);
if (!handleSecond)
{
cout<<"create thread 2 error:"<<endl;
}
//HANDLE arrayHandle[] = {handleFirst, handleSecond};
//WaitForMultipleObjects(2, arrayHandle, TRUE, INFINITE);
WaitForSingleObject(handleFirst, INFINITE);//等待线程返回,用sleep()就太山寨了
WaitForSingleObject(handleSecond, INFINITE);
CloseHandle(handleFirst);//句柄默认值2 这里减1,线程函数执行完后释放资源。
CloseHandle(handleSecond);
return 0;
}
另外,由于这里的两个线程函数在输出时没有加同步处理,所以输出时候有线程切换,你看到屏幕上的输出可能比较杂乱。
最新文章
- 浅谈JavaScript、ES5、ES6
- mysql在同一个表上查询和更新
- Java线程基础实例
- Entity Framework - Using Transactions or SaveChanges(false) and AcceptAllChanges()?
- Windows下配置Java开发环境
- CodeForces 300C --数论
- 异步刷新tableView
- struts2在web.xml中的配置
- C# 工厂模式示例
- JS学习笔记——标准对象
- JQuery(三) Ajax相关
- 通过扫描包路径获取包内class
- 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
- vsftp虚拟用户登录配置详解
- Apache Maven-AntRun-Plugin 官网 bug
- NYoj_104最大和
- [翻译]Protocol Buffer 基础: C++
- sms-tools的使用
- 38.html----相对于父元素的fixed定位的实现
- Java基础加强总结(一)——注解(Annotation)