创建一个新线程

本程序将使用到的函数原型如下:
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );
上面的两个函数我们常使用第一个。
其中(1)pfnThreadProc表示要做为一个新线程启动的那个函数(必须事先定义一个全局函数),并且该函数必须是如下格式:
UINT MyControllingFunction( LPVOID pParam )
{
//这里可以添加一个cpu占用率很高的程序,也可以是一个死循环程序。
//如果是有窗体的任务列表中会出现该线程名称,即窗体名称。
return 0;
}
(2)pParam就表示为新线程指定的窗口句柄,如:
AfxGetMainWnd()->m_hWnd
(3)nPriority表示这个线程的优先级,可选的常有:
THREAD_PRIORITY_ABOVE_NORMAL 比正常的优先级高一点;
THREAD_PRIORITY_BELOW_NORMAL 比正常的优先级低一点;
THREAD_PRIORITY_HIGHEST 比正常的优先级高两点;
THREAD_PRIORITY_IDLE 设置优先级基数为1;
THREAD_PRIORITY_LOWEST 比正常的优先级低两点;
THREAD_PRIORITY_TIME_CRITICAL 设置优先级基数为15;
0 设置优先级为正常。
后面还有很多参数可以都是0,也可以省略。
★本实例将创建一个线程,其原代码如下:
UINT Proc1(LPVOID param)//按第一个参数要求格式创建一个函数。
{
int i;
for(i=0;i=1000;i++)//因为i=1000,所以本程序将死循环。
{
::MessageBeep(0);
}
return 0;
}
void CMy111Dlg::OnCancel()//在另一个按钮中创建该函数的新线程。
{
HWND hWnd=GetSafeHwnd();//取得当前窗口的句柄供函数使用。
AfxBeginThread(Proc1,hWnd,0);//以正常优先级调用。
//Proc1(AfxGetMainWnd()->m_hWnd);
}
从上例可以看出,用这种方法运行该死程序,主窗口还可以被托动,但如果把上例改为
Proc1(AfxGetMainWnd()->m_hWnd)虽然程序可以运行,但主窗口无法被移动。
此代码归7CTT所有,代码均调试通过

你可能感兴趣的:(thread,null,任务,attributes)