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