我们在进行win32控制台程序调试的时候也经常会用到多线程,
这里简单的用一个例子来给初学者说明多线程编程,由此开启
多线程的编程学习,仅抛砖引玉而已,在编程的过程中深入。
1、新建win32控制台工程
2、新建c++文件并添加到工程
3、包含头文件
#include <windows.h>
#include <stdio.h>
4、设置工程
Project -> Settings -> C/C++ -> Category ->
Code Generation -> User run-time library ->
Debug Multithreaded
5、实现多线程函数
DWORD WINAPI ThreadProc1(LPVOID lpParam){
printf(“线程开始\n”);
while(1){
//doing someting
}
printf(“线程结束\n”);
return 0;
}
6、实现main函数
void main(){
HANDLE thread_handle;
DWORD thread_ID;
thread_handle = CreateThread( //创建线程
NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadProc1,
NULL,
0,
& thread_ID
);
if(!thread_handle)
printf("线程创建失败\n");
WaitForSingleObject(thread_handle,INFINITE); //等待线程执行完成
CloseHandle(thread_handle); //关闭线程
}
7、线程参数传递
如果线程函数需要使用参数,可以使用全部变量,在线程函数中访问全局变量,
这样最好将全局变量声明为static;也可以在创建线程的时候将参数作为结构传给
CreateThread函数的第4个参数,然后在线程函数中解析出需要的变量。
定义参数结构体:
Struct FuncPars{
int id;
char *name;
};
定义参数结构体变量:
FuncPars pars;
pars.id = 0x01;
pars.name = ”thread1”;
传递参数结构体指针:
thread_handle = CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE) ThreadProc1,
&pars,
0,
&thread_ID
);
线程函数中解析参数:
DWORD WINAPI ThreadProc1(LPVOID lpParam){
int id;
char *name;
id = (FuncPars *)lpParam->id;
name = (FuncPars *)lpParam->name;
printf(“线程开始\n”);
while(1){
//doing someting
}
printf(“线程结束\n”);
return 0;
}
相关函数原型以及参数定义请参考MSDN