简单地创建多线程 thread
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】C/C++
方法一(部分老版本VS不支持)
方法二(通用)
[
6 瀏覽
0 評論
0 贊
0 踩
]
概要
快速创建多线程
正文
方法一(部分老版本VS不支持)
所需头:
#include <thread>
例子:
void print(char Num) { while(true) { printf("ok%c\n",Num); Sleep(200); } } int main(void) { std::thread(print,'1').detach(); std::thread(print,'2').detach();//.detach()让对象和线程分离,这样对象被销毁,线程还能运行,否则易出错 while(true);//阻塞 return 0; }
可以看到1,2交替输出
要线程通讯咋办?直接用全局变量最方便。
方法二(通用)
注意:在旧版的VS,如VC6中,没有thread头,那么就需要换另一种方法创建线程,也很简单,但是不能任意传递参数:
函数原型:
HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全相关的属性,常置为NULL SIZE_T dwStackSize, // 新线程的初始化栈在大小,可设置为0 LPTHREAD_START_ROUTINE lpStartAddress, // 被线程执行的回调函数,也称为线程函数 LPVOID lpParameter, // 传入线程函数的参数,不需传递参数时为NULL DWORD dwCreationFlags, // 控制线程创建的标志 LPDWORD lpThreadId // 传出参数,用于获得线程ID,如果为NULL则不返回线程ID );
例子:
void function() { printf("hello"); } int main() { // 创建线程 HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)function/* 函数名 */, 0, 0, NULL); // 关闭线程(必要) CloseHandle(hThread); return 0; }
这种方法传递参数不方便,所以如果要传递参数,建议使用全局变量。
写在函数前的 (LPTHREAD_START_ROUTINE) 一般来说都是要加上的,如果编译报错的话就把他删了。