mfc c++ 多线程AfxBeginThread 例子( 一)

来源:互联网 发布:管家婆软件如何操作 编辑:程序博客网 时间:2024/06/16 12:07

AfxBeginThread 为用户界面线程,该函数的原型为:

CWinThread* AfxBeginThread(
AFX_THREADPROC pfnThreadProc, //线程函数地址,即线程函数的入口
LPVOID pParam, //线程参数
int nPriority = THREAD_PRIORITY_NORMAL, //线程优先级
UINT nStackSize = 0, //线程堆栈大小,默认为1M
DWORD dwCreateFlags = 0, //设置线程的标志位
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL //线程创建以后,会处于挂起
);

使用前面三个参数,后面不写则按默认值,如AfxBeginThread(MarkBtmThread1,this, THREAD_PRIORITY_HIGHEST );

线程优先级网上有很多,具体可以查查看,THREAD_PRIORITY_HIGHEST为高

下面给出一个多线程使用例子:

引入windows.h
声明线程:
static UINT MarkBtmThread1(LPVOID param11);
static UINT MarkBtmThread2(LPVOID param22);

新建开始按钮,在按钮内添加代码:

volatile bool g_MarkFlag1 = true;
volatile bool g_MarkFlag2 = true;
int a= 0;
int b= 0;
void CMSI_VC_DemoDlg::OnBnClickedAutoMark()
{
if(g_bCheckCard1==true)
{
AfxBeginThread(MarkBtmThread1,this,THREAD_PRIORITY_HIGHEST);//线程入口
}
if(g_bCheckCard2==true)
{
AfxBeginThread(MarkBtmThread2,this,THREAD_PRIORITY_HIGHEST); //两个线程优先级都为高
}
}
UINT CMSI_VC_DemoDlg::MarkBtmThread1(LPVOID param11)
{
CMSI_VC_DemoDlg dlg = (CMSI_VC_DemoDlg)param11;
while (g_MarkFlag1)
{
a++;
}
}
UINT CMSI_VC_DemoDlg::MarkBtmThread2(LPVOID param22)
{
CMSI_VC_DemoDlg dlg = (CMSI_VC_DemoDlg)param22;
while (g_MarkFlag1)
{
b++;
}
}

新建停止按钮

void CMSI_VC_DemoDlg::OnBnClickedStopmarkBtn()
{
g_MarkFlag1 =false;
g_MarkFlag2 =false;
}

——————–END——————————

原创粉丝点击