您的位置:首页 > 其它

使用MFC中的AfxBeginThread创建多线程

2013-11-14 14:40 477 查看
创建一个基于对话框的工程,工程名为CreateThreadRect

在CreateThreadRect.cpp中增加一个ThreadProc函数,代码如下

工作者线程的函数必须是全局函数或静态成员函数,不能是普通的成员函数

DWORDWINAPIThreadProc(LPVOIDpParam)

{

CDC*pdc;

//将传入的参数转为RECT*

RECT*rect=(RECT*)pParam;

//得到设备句柄

pdc=AfxGetApp()->m_pMainWnd->GetDC();

//设置画刷

CBrushbrush(HS_VERTICAL,RGB(0,255,0));

//选入到设备中

CBrush*oldbrush=pdc->SelectObject(&brush);

intn=0;

while(n++<=2000)

{

pdc->Rectangle(rect->left,rect->top,rect->right+n,rect->bottom);

Sleep(1);

}

pdc->SelectObject(oldbrush);

pdc->ReleaseOutputDC();

return0;

}


添加一个按钮控件IDTHREAD,该按钮事件代码如下

voidCCreateThreadRectDlg::OnThread()

{

//TODO:Addyourcontrolnotificationhandlercodehere


RECTrect1;

rect1.left=20;//左上角x坐标

rect1.top=100;//左上角y坐标

rect1.right=20;//右下角x坐标

rect1.bottom=rect1.top+100;//右下角y坐标

//创建第一个线程ThreadProc,相对优先级THREAD_PRIORITY_IDLE面对任何等级调整为1

AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect1,THREAD_PRIORITY_IDLE);


RECTrect2;

rect2.left=rect1.left;

rect2.top=rect1.bottom+20;

rect2.right=rect1.right;

rect2.bottom=rect2.top+100;

//创建第二个线程ThreadProc,相对优先级THREAD_PRIORITY_TIME_CRITICAL

//面对任何等级调整为15,面对REALTIME等级调整为32

AfxBeginThread((AFX_THREADPROC)ThreadProc,&rect2,THREAD_PRIORITY_TIME_CRITICAL);

}


运行结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: