#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;
}

另外,由于这里的两个线程函数在输出时没有加同步处理,所以输出时候有线程切换,你看到屏幕上的输出可能比较杂乱。

最新文章

  1. 浅谈JavaScript、ES5、ES6
  2. mysql在同一个表上查询和更新
  3. Java线程基础实例
  4. Entity Framework - Using Transactions or SaveChanges(false) and AcceptAllChanges()?
  5. Windows下配置Java开发环境
  6. CodeForces 300C --数论
  7. 异步刷新tableView
  8. struts2在web.xml中的配置
  9. C# 工厂模式示例
  10. JS学习笔记——标准对象
  11. JQuery(三) Ajax相关
  12. 通过扫描包路径获取包内class
  13. 算法导论(第三版)Problems2(归并插入排序、数列逆序计算)
  14. vsftp虚拟用户登录配置详解
  15. Apache Maven-AntRun-Plugin 官网 bug
  16. NYoj_104最大和
  17. [翻译]Protocol Buffer 基础: C++
  18. sms-tools的使用
  19. 38.html----相对于父元素的fixed定位的实现
  20. Java基础加强总结(一)——注解(Annotation)

热门文章

  1. 批量插入数据利器之SqlBulkCopy
  2. lvds配置
  3. 洛谷P1979 华容道
  4. Mac eclipse 连接 手机调试
  5. selenium - xpath - 定位
  6. Nginx httpS server配置
  7. GitFlow在命令行的使用
  8. Quartz.net 2.x 学习笔记01
  9. 静态方法staticmethod类方法classmethod
  10. 360良心制作fonts.useso.com