在VC下使用多线程的使用详解

   昨天看了一下多线程,以后还是将一些代码发到博客上比较好。现在电脑上以前写的代码都没有打开看一眼的欲望了。还是发到博客好,可以随时看看,而且也能帮助一下别人。呵呵

          最主要就是学习了一下CreateThread函数以及这次彻底看了一下LPVOID类型,原来这个类型指的是空指针啊,以前很汗啊。

下面就上代码:

// MutiThread.cpp : Defines the entry point for the console application.
//

/*

        file:MutiThread.cpp

        author:www.5dkx.com

*/

#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "iostream"
/*这个头文件必须加啊,要不然的话WINAPI就无法识别*/
using namespace std;
static int tickets=50;
DWORD WINAPI SHOP1(LPVOID lpParameter);
DWORD WINAPI SHOP2(LPVOID lpParameter);
/*WINAPI其实和CALLBACK是一个类型,都是定义一个指针函数*/
/*LPVOID就是一个万金油类型 原型为void *是一个空指针,可以传递任何类型参数*/

int main(int argc, char* argv[])

 HANDLE Thread1 = CreateThread(
  NULL,//*被继承的线程是否可以得到该线程句柄【我的理解:返回值为NULL意思就是返回句柄NLL自然就无法继承】*/
  0,//*创建线程占用内存空间,=0表示由windows自动分配*/
  SHOP1,//*调用函数,其实就是个回调函数*/  
  NULL,//*传递的参数,这里没有传递参数,如果传递的话则SHOP1函数可以使用*/  
  0,//*进程创建的时候状态,为0表示直接运行,不挂起*/  
  NULL);
  /*创建线程时是否创建ID*/
 HANDLE Thread2 = CreateThread(NULL,0,SHOP2,NULL,0,NULL); 

 _sleep(1000);
 CloseHandle(Thread1);
 CloseHandle(Thread2);
 return 0;
}

DWORD WINAPI SHOP1(LPVOID lpParameter)
{
 while(1)
 {/*死循环,也可以用for(;;)*/
  if(tickets>0)//有票
  {
   tickets--;
   printf("SHOP1售出一张飞机票,还剩下 %d 张飞机票\n",tickets);
  }
  else
  {
   printf("售票告罄……\n");
   return 0;
   /*也可以break*/
  }
 }
 return 0;
}

DWORD WINAPI SHOP2(LPVOID lpParameter)
{
 while(1)
 {/*死循环,也可以用for(;;)*/
  if(tickets>0)//有票
  {
   tickets--;
   printf("SHOP2售出一张飞机票,还剩下 %d 张飞机票\n",tickets);
  }
  else
  {
   printf("售票告罄……\n");
   return 0;
   /*也可以break*/
  }
 }
 return 0;
}

就是这样。注释还算详细吧。

首发:http://www.5dkx.com/arch/144.html

非特别说明均为原创文章如转载,请注明:转载自 5D开心博客 [ http://www.5DKX.com/ ]

原文地址:https://www.cnblogs.com/5dkx/p/1700961.html