Win32多线程

Posted C语言与程序设计

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Win32多线程相关的知识,希望对你有一定的参考价值。

Win32多线程(1) 

编程学习群:530139883

Win32多线程(1)

进入阅读原文进入学习

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;
}

------------------------------------------

Win32多线程(1)

是不是很简单?不过我想说的是这里还有一个bug,留待下一讲吧,如果大家想要找到这个bug,不妨无限运行下去,你们会看到一个很让人意外的数字出现。
   好了,今天我们就简单的尝试一下多线程,如果大家有什么问题,可以直接提问,看到的话一定帮忙解答。
======================================

Win32多线程(1)


Win32多线程(1)

Win32多线程(1) 

编程学习群:530139883

Win32多线程(1)

进入阅读原文进入学习

c/c++直播课-每晚21:30-22:30

更多教程,请点击阅读原文加入一起学习!



编程学习群:530139883

进入阅读原文进入学习

c/c++直播课-每晚21:30-22:30

更多教程,请点击阅读原文加入一起学习!

以上是关于Win32多线程的主要内容,如果未能解决你的问题,请参考以下文章

win32多线程编程

win32多线程设计总结

win32API多线程编程

Win32 多线程编程

Win32多线程调用gdal库接口

win32线程