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——————————