windows下创建多线程:
一个简单的例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 |
#include <windows.h> //需要含该头文件 #include <iostream> //winodws下多线程函数原型必需如下声明 //DWORD unsigned long //WINAPI _stdcall //函数名可以用任何合法名称替换 //LPVOID void * DWORD
WINAPI ThreadProc( LPVOID
lpParamter); int
main() { //多线程例子 //win线程创建函数 HANDLE
hThrdPrc = CreateThread(NULL, //安全性 NULL为默认 0, //初始栈的大小, 设为0或小于默认提交大小, 就会使用同调用函数的线程相同的栈空间大小. ThreadProc, //线程地址 NULL, //线程接受的参数 0, //附加标记, CREATE_SUSPENDED: 创建线程后要手动调用ResumeThread启动线程, 0为自动启动 NULL /*一个结构体, 用来接收线程ID, 可为NULL*/ ); CloseHandle(hThrdPrc); //关闭句柄, 线程已启动, 表示对这个线程句柄没兴趣作别的事情 std::cout<< "this is in main!\n" ; std::cin.get(); return
0; } DWORD
WINAPI ThreadProc( LPVOID
lpParamter) { std::cout<< "Thread in ThreadProc not in main\n" ; return
0; } |
这是一个带有返回值, 和传递多个参数的例子:
思路是把所有需要的参数和返回值封装到一个结构中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 |
#include <windows.h> #include <iostream> DWORD
WINAPI ThreadProc( LPVOID
lpParamter); typedef
struct { //将多个参数和返回值放到结构中 int
a; int
b; int
sum; bool
isOk; //判断线程是否完成 } Addtor, * PTRADD; int
main() { Addtor adder; adder.a = 10; adder.b = 20; adder.isOk = false ; HANDLE
hThrdPrc = CreateThread(NULL, 0, ThreadProc, ( LPVOID )(&adder), //将结构体指针传递给线程 0, NULL); CloseHandle(hThrdPrc); while (!adder.isOk) {} //等待线程结果 std::cout<< "Sum = " <<adder.sum<<std::endl; std::cout<< "done in main!\n" ; std::cin.get(); return
0; } DWORD
WINAPI ThreadProc( LPVOID
lpParamter) { PTRADD pa = (PTRADD)lpParamter; pa->sum = pa->a + pa->b; pa->isOk = true ; return
0; } |
原文:http://www.cnblogs.com/iegad2011/p/3524967.html