读书人

C语言中创建多个线程的方法

发布时间: 2008-11-07 13:03:57 作者: liuhuituzi

在工作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。  

在VC中,无非是创建线程和写线程函数

  1, 创建线程:

  #include

  在MFC中通常在OnInitDialog()下面创建线程

  //定义参数:SerialControl

  //------------------变量函数初始化调用区域--------

  CSerialControl * m_SerialControl=new CSerialControl();

  m_SerialControl->Create(NULL,\"aa\",WS_CHILD,CRect(0,0,0,0),this,2,NULL);

  m_SerialControl->InitAllSerialPort();

  //------------------------------------------------

  HANDLE hThread1=CreateThread(NULL,0,DetectCar,(LPVOID)SerialControl,0,NULL);

  CloseHandle(hThread1);//此处关闭线程的句柄,但不意味关闭线程,线程在程序退出时关闭

  参数说明:

  HANDLE CreateThread(

  LPSECURITY_ATTRIBUTES lpThreadAttributes,//必须为NULL

  DWORD dwStackSize, //一般为0 ,表示堆栈与外部大小相同

  LPTHREAD_START_ROUTINE lpStartAddress, //线程函数名称

  LPVOID lpParameter, //传递给线程函数的参数,如果为多个,自定义结构体

  DWORD dwCreationFlags, //0表示创建线程后立即启动线程,如果不是立即启动需要调用ResumeThread函数

  LPDWORD lpThreadId);//用来标记该线程的名称

  2, 定义线程函数:

  //函数的定义

  static DWORD WINAPI DetectCar(LPVOID lpParameter); //一般用静态函数

  //remark:由于线程函数是静态函数,如果要在函数中用到对象,必须通过

  //函数的实现

  /***************************************************

  *作者:万田

  *时间:2007-13-03

  *函数:DetectCar() 说明:检测线程

  ****************************************************/

  DWORD WINAPI CISSDlg::DetectCar(LPVOID lpParameter)

  {

  TRACE(\"Thread DetectCar is running\\r\\n\");

  CSerialControl* SControl=(CSerialControl*)lpParameter;

  //define:record which road is car

  int Carexit=0;

  while (TRUE)//do this forever

  {

  //get:which road exit car

  Carexit=SControl->m_GroudDetector1.CarExists();

  ***********

  }

  return true;

  }

3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.net/exam/

读书人网 >复习指导

热点推荐