您的位置:首页 > 其它

AfxBeginThread函数创建进程

2011-08-07 16:13 495 查看
MFC使用AfxBeginThread()函数创建线程

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,

dwCreateFlags=0,LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL)

pfnThreadProc:表示线程函数指针,函数原型是

UINT ControllingFunction(LPVOID pParameter);

pParam:线程函数的参数

nPriority线程的优先级

nStackSize堆栈大小

dwCreateFlags线程创建标记

lpSecurityAttrs安全属性

pThreadClass派生于CWinThread类的运行时类对象

示例:



UINT Multilp(LPVOID pThreadParam)

{

CMutilThread1Dlg *pdlg=(CMutilThread1Dlg *)pThreadParam;

CString s2;

s2="";

for(int i=1;i<=9;i++)

{



for(int j=1;j<=9;j++)

{

s2="";

s2.Format("%d*%d=%d",i,j,i*j);

pdlg->m_table.AddString(s2);

}

}

return 0;

}

UINT Tital(LPVOID pThreadParam)

{

CMutilThread1Dlg *pdlg=(CMutilThread1Dlg *)pThreadParam;

CString s;

s="";

_int64 count=0;

for(UINT i=1;i<=1000;i++)

{

s.Empty();

count+=i;

s.Format("累计到%d结果是%d",i,count);

pdlg->m_total.AddString(s);

}

return 0;

}

void CMutilThread1Dlg::OnStart()

{

m_ptable=AfxBeginThread(Multilp,this,0,0,0,NULL);

m_ptotal=AfxBeginThread(Tital,this,0,0,0,NULL);

}

void CMutilThread1Dlg::OnCancle()

{

DWORD exit=0;

if(m_ptable!=NULL)//判断是否为空

{

BOOL ret=GetExitCodeThread(m_ptable->m_hThread,&exit);//获取线程退出代码

if(exit==STILL_ACTIVE) //如果进程仍在进行

{

m_ptable->ExitInstance();//退出进程

delete m_ptable;

}

}

exit=0;

if(m_ptotal!=NULL)//判断是否为空

{

exit=0;

BOOL ret=GetExitCodeThread(m_ptotal->m_hThread,&exit);//获取线程退出代码

if(exit==STILL_ACTIVE) //如果进程仍在进行

{

m_ptotal->ExitInstance();//退出进程

delete m_ptotal;

}

}

CDialog::OnCancel();



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