实现Windows 多线程的最简编码 下载:源码 可执行文件
多线程是Windows 开发者不可回避的内容。但是对于初学者,上百行的实例代码是很不容易学习的,而且其中很多无关线程的编码也影响了我们的视线。这里我整理出来一个最简单的实现多线程的代码(这个程序将创建2个新的线程,每个线程都向控制台窗口输出一句话,如果在控制台输入数字“1”就开始线程,其它的输入就暂停线程。):
- 新建一个Console 工程;
- 修改stdafx.h 头文件,使之包含下面的内容:
#include <windows.h> //使用多线程必须的
#include <iostream> //这是观看效果用的
using namespace std;
- 然后是主文件的main 函数的改造:
- 首先在主文件main 函数的外部声明2个函数,给多线程调用。
DWORD WINAPI MTOne(LPVOID param);
DWORD WINAPI MTTwo(LPVOID param); - 线程函数的实现如下:
DWORD WINAPI MTOne(LPVOID param){
while(true)
{
Sleep(1000);
cout<<"hi! ";
}
//一旦返回,这个线程就结束了。
return 0;
}
- 首先在主文件main 函数的外部声明2个函数,给多线程调用。
DWORD WINAPI MTTwo(LPVOID param){
while(true)
{
Sleep(1000);
cout<<"joy! ";
}
return 0;
}
- 然后在main 函数里面创建线程和控制线程的循环:
int main(int argc, char* argv[])
{
int inp=0;
HANDLE hand=CreateThread (NULL, 0, MTOne, (void*)&inp, CREATE_SUSPENDED, NULL);
HANDLE hand2=CreateThread (NULL, 0, MTTwo, (void*)&inp, CREATE_SUSPENDED, NULL);
while(true){
cin>>inp;
if(inp==1) //运行线程
{
ResumeThread(hand);
ResumeThread(hand2);
}
else //暂停线程
{
SuspendThread(hand);
SuspendThread(hand2);
}
};
//终止线程
TerminateThread(hand,1);
TerminateThread(hand2,1);
return 0;
}
好了,已经可以编译运行了:
已经可以看到,输入了“1”之后,线程开始执行了。由于操作系统给线程分配时间的“随机性”,两个线程输出的句子会互相“打断”。然后输入“2”,线程就暂停了。
评论