用户界面线程和工作者线程都是由AfxBeginThread创建的,MFC提供了两个重载版的AfxBeginThread,一个用于用户界面线程,另一个用于工作者线程。
用户界面线程的AfxBeginThread:
CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority,
UINT nStackSize,
DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs= NULL
)
1.第1个参数AFX_THREADPROC pfnThreadProc为线程调用函数名称。AFX说明是个全局函数,为了方便以后定义的时候,直接定义为static UINT jisuan(LPVOID lpParam)静态函数就行。
2. 第2个参数参数LPVOID pParam,是一个void类型的参数。在创建一个线程的时候,你可以传进去一个量,然后在UINT CThreadDlg::jisuan(LPVOID lpParam)函数中取出来。最常用的用法就是,当你想用到窗口类的时候,可以将窗口类的句柄传过去。方法如下:先获取窗口句柄CWnd *pParam=AfxGetMainWnd(),然后AfxBeginThread作为第二个参数传过去。在线程函数中强制类型转换CThreadDlg *pThreadDlg=(CThreadDlg *)lpParam就能操作窗口类的变量、控件等等了
3.第3个参数nPriority工作线程优先级:
idle (最低) | THREAD_PRIORITY_IDLE | 如果进程优先级为realtime则调整为16,其它情况为1 |
LOWEST 低 | THREAD_PRIORITY_LOWEST | -2(在原有基础上-2) |
BELOW 低于标准 | THREAD_PRIORITY_BELOW_NORMAL | -1(在原有基础上-1) |
NORMAL(标准) | THREAD_PRIORITY_NORMAL | 不变(取进程优先级值) |
ABOVE 高于标准 | THREAD_PRIORITY_ABOVE_NORMAL | +1(在原有基础上+1) |
HIGHEST (高) | THREAD_PRIORITY_HIGHEST | +2(在原有基础上+2) |
CRITICAL(最高) | THREAD_PRIORITY_TIME_CRITICAL | 如果进程优先级为realtime则调整为31,其它情况为15 |
4.第4个参数nStackSize: 以字节为单位指定新线程的堆栈大小。如果为0,则与创建它的线程的堆栈大小相同。
5.第5个参数dwCreateFlags:指定一个额外的标志控制线程的产生。它可以包括下面两个值中的个:CREATE_SUSPENDED:以挂起模式开始线程,并且指定挂起次数.当调用ResumeThread时,这个线程才会被执行。0 :创建之后,马上执行线程。
6.第6个参数lpSecurityAttrs 默认为null就行。
创建线程后,如果成功则会返回CWinThread* pThread的变量。这个变量可用于对线程的控制,如果要暂停线程:pThread->SuspendThread();如果要继续线程pThread->ResumeThread();