用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所有,代码均调试通过。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值