C++学习笔记--线程简单应用

来源:互联网 发布:mac系统软件 编辑:程序博客网 时间:2024/04/29 21:55

对于线程,对于新手来说会觉得非常麻烦,实际上不是如此,其实很简单,只是要注意线程的关闭和开启。简单的方法创建线程达到效果。

第一种方式:----MFC封装好调用线程方式

对于线程,对于新手来说会觉得非常麻烦,实际上不是如此,其实很简单,只是要注意线程的关闭和开启。简单的方法创建线程达到效果。
#include "ComMonitorThread.h"  // 引用线程

在按钮的程序中添加
m_pMainDlg = (CSignalLampSetToolDlg*)::AfxGetMainWnd();
::AfxBeginThread(ClientThread,this);   //获得线程程序ClientThread() 设置此程序为线程程序,线程中一直执行此函数。
UINT CComMonitorThread::ClientThread(LPVOID lParam)//    lParam 为线程句柄。
{
CComMonitorThread* pComm = (CComMonitorThread*)lParam;  //CComMonitorThread 为线程所在对象。
pComm->OnStart();
return 0;
}
第二种方式---非MFC封装调用线程。

CreateThread

函数原型:

[cpp] view plaincopy
  1. HANDLE CreateThread(  
  2.  LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD  
  3.  DWORD dwStackSize,                       // initial stack size  
  4.  LPTHREAD_START_ROUTINE lpStartAddress,   // thread function  
  5.  LPVOID lpParameter,                      // thread argument  
  6.  DWORD dwCreationFlags,                   // creation option  
  7.  LPDWORD lpThreadId                       // thread identifier  
  8. );  
此函数在其调用进程的进程空间里创建一个线程。

参数说明:

lpThreadAttributes:指向SECURITY_ATTRIBUTES结构体,该结构体决定了函数返回句柄是否被子进线程继承。

如果为NULL,则不能被继承。

dwStackSize:指定了线程的堆栈大小,一般为0,使用默认的堆栈大小。

lpStartAddress:指向应用定义的线程函数,线程函数类型为LPTHREAD_START_ROUTINE。此值代表线程的开始地址。

lpParameter:线程函数所带的参数。是一个指向结构的指针,不需传递参数时,为NULL。

dwCreateFlags:线程标志。如果指定为CREATE_SUSPENDED,线程创建的时候的状态为挂起状态,

线程不会立即执行直到调用ResumeThread函数。

如果值为0,线程会立即执行。

lpThreadId:保存新线程的id.

举例:
hThread = CreateThread(  
  NULL,                                   // SD  
0,                                  // initial stack size  
(LPTHREAD_START_ROUTINE)ThreadProc,    // thread function  
NULL,                                    // thread argument  
0,                                   // creation option  
&threadID                               // thread identifier  
               );  
其中ThreadProc 为线程程序,你所需要运行的程序放在ThreadProc中就可以了。
0 0