线程之路一:CreateThread()和-beginthreadex()
来源:互联网 发布:哈曼卡顿和惠威 知乎 编辑:程序博客网 时间:2024/05/23 00:01
第一部分代码 CreateThread();
线程传值线程返回pid
#include <Windows.h>#include <iostream> //传值 返回进程idDWORD WINAPI ThreadFun(LPVOID pm){std::cout<<*((int*)pm)<<"\nhello world!!!\n"<<GetCurrentThreadId()<<std::endl;return 0;}int main(){printf("最简单的创建多线程实例\n");DWORD m=NULL;int* x=new int(13);HANDLE handler =CreateThread(NULL,0,ThreadFun,x,0,&m);WaitForSingleObject(handler,INFINITE);printf("进程ID为%d\n",m);system("pause");delete x;return 0;}
此段内容复制的
_beginthreadex()函数在创建新线程时会分配并初始化一个_tiddata块。这个_tiddata块自然是用来存放一些需要线程独享的数据。事实上新线程运行时会首先将_tiddata块与自己进一步关联起来。然后新线程调用标准C运行库函数如strtok()时就会先取得_tiddata块的地址再将需要保护的数据存入_tiddata块中。这样每个线程就只会访问和修改自己的数据而不会去篡改其它线程的数据了。因此,如果在代码中有使用标准C运行库中的函数时,尽量使用_beginthreadex()来代替CreateThread()。
第二段代码:_beginthreadex()
#include <iostream>#include<Windows.h>#include <process.h>unsigned int __stdcall ThreadFun(PVOID pm){std::cout<<GetCurrentThreadId()<<"说:"<<*((int*)pm)<<std::endl;return 0;}int main(){const int n =5;int x[n]={0,9,8,7,6};unsigned int a[n];HANDLE handle[n];for(int i=0;i<n;i++)handle[i] =(HANDLE)_beginthreadex(NULL,0,ThreadFun,&x[i],0,&a[i]);WaitForMultipleObjects(n,handle,true,INFINITE);for(int j=0;j<n;j++)std::cout<<a[j]<<std::endl;system("pause");return 0;}
运行结果:
这张图好不容易截到;充分说明进程调用过程的不确定性
0 0
- 线程之路一:CreateThread()和-beginthreadex()
- beginthreadex和CreateThread区别
- beginthreadex CreateThread
- beginthread beginthreadex CreateThread 区别
- C++ 之 CreateThread 与beginThreadex用法具体示例解析 多线程 (三)
- CreateThread()、_beginthreadex()及、AfxBeginThread(),beginthread,beginthreadex
- _beginthread和CreateThread 创建线程
- beginthread和beginthreadex的使用方法
- beginthread和beginthreadex的使用方法
- beginthread和beginthreadex的使用方法
- 多线程篇(一)——线程的创建方法CreateThread和_beginthreadex
- CreateThread和AfxBeginThread创建线程实例
- 线程句柄以及createthread()和closehadle()
- 线程句柄以及createthread()和closehadle()
- 线程句柄以及createthread()和closehadle()
- Windows下创建线程的方法_beginThread和CreateThread区别
- 用CreateThread()创建线程
- 使用CreateThread创建线程
- 用d3d9合并jpeg
- poj-2318-TOYS-计算几何
- 500G的硬盘坏了怎么找回文件
- Java面向对象之继承
- 手动生成AWR报告
- 线程之路一:CreateThread()和-beginthreadex()
- Genereate a histogram of how many times each unique word is used in that test
- 在 Android* 平台上设置原生 OpenGL ES*
- pentaho5.0.1将数据库移植成mysql
- AD域帐号被锁问题排查
- <include />&<merge />
- 为Junit虚拟Jsp Container的数据库连接池
- 傅老师课堂:Oracle高级查询之GROUP BY
- MD5 java 学习笔记01