用VC++创建一个新线程

用VC++创建一个新线程
本程序将使用到的函数原型如下: 
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所有,代码均调试通过。

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