Win32多线程
Posted C语言与程序设计
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win32多线程相关的知识,希望对你有一定的参考价值。
编程学习群:530139883
进入阅读原文进入学习
c/c++直播课-每晚21:30-22:30
更多教程,请点击阅读原文加入一起学习!
我一直在想,是要先说win32多线程呢还是C++多线程,想了想,我觉得我们还是先来说说win32多线程吧,因为说到C++的多线程,很多人都认为是一个笑话,在线程面前,随便一个脚步语言都比C++要好实现得多,但是笑话总归是笑话,C++一直没有将线程纳入标准,但是这不影响我们用C++去写多线程,因为每个平台都有相关的平台函数。由于我个人的原因,所以对于linux又或者unix一点都不熟悉,所以只能和大家谈谈win32多线程的一些知识。
我们知道春运的时候火车票都卖得很紧张,如果说每天火车站发放10000张票,但是我们都知道,火车站通常都开有不少窗口,每个窗口都在销售着这1000万张票,卖一张少一张……现在我们来模拟火车站的售票系统,假设有4个窗口,那就相当于我们开了四条线程。
关于线程的概念,我这里不想多说了,如果大家真心想要弄清楚线程是个啥玩意的话,我的推荐是《windows核心编程》和《win32多线程程序设计》这两本书,当然如果大家没这闲工夫的话,那么跟着我的脚步走一样可以学会开线程。
要创建一条线程,我们首先得认识一个函数:
---------------------------------------------
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAtributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAdress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
----------------------------------------------
int main(){
HANDLE _handle[4];
DWORD _threadID[4];
_handle[0] = CreateThread(NULL,0,f1,NULL,0,&_threadID[0]);
_handle[1] = CreateThread(NULL,0,f2,NULL,0,&_threadID[1]);
_handle[2] = CreateThread(NULL,0,f3,NULL,0,&_threadID[2]);
_handle[3] = CreateThread(NULL,0,f4,NULL,0,&_threadID[3]);
for(int i=0;i<4;i++){
if(_handle[i]){
cout<<"thread "<<_threadID[i]<<" launched
"<<endl;
CloseHandle(_handle[i]);
}
}
Sleep(40000);
return 0;
}
DWORD WINAPI f1(LPVOID){
while(true){
if(g_count>0){
cout<<"F1: "<<g_count--<<endl;
}
else
break;
}
return 0;
}
DWORD WINAPI f2(LPVOID){
while(true){
if(g_count>0){
cout<<"F2: "<<g_count--<<endl;
}
else
break;
}
return 0;
}
DWORD WINAPI f3(LPVOID){
while(true){
if(g_count>0){
cout<<"F3: "<<g_count--<<endl;
}
else
break;
}
return 0;
}
DWORD WINAPI f4(LPVOID){
while(true){
if(g_count>0){
cout<<"F4: "<<g_count--<<endl;
}
else
break;
}
return 0;
}
------------------------------------------
是不是很简单?不过我想说的是这里还有一个bug,留待下一讲吧,如果大家想要找到这个bug,不妨无限运行下去,你们会看到一个很让人意外的数字出现。
好了,今天我们就简单的尝试一下多线程,如果大家有什么问题,可以直接提问,看到的话一定帮忙解答。
======================================
编程学习群:530139883
进入阅读原文进入学习
c/c++直播课-每晚21:30-22:30
更多教程,请点击阅读原文加入一起学习!
编程学习群:530139883
进入阅读原文进入学习
c/c++直播课-每晚21:30-22:30
更多教程,请点击阅读原文加入一起学习!
以上是关于Win32多线程的主要内容,如果未能解决你的问题,请参考以下文章