线程的创建
1:使用CreateThread函数创建线程
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpsa,DWORD cbStack,LPTHREAD_START_ROUTINE lpStartAddr,LPVOID lpvThreadParam,DWORD fdwCreate,LPDWORD lpIDThread);
lpsa:表示线程的安全属性,可以是NULL;
cbStack:表示线程栈的最大大小,该参数可以被忽略
lpStartAddr:表示线程函数,当线程运行时,将执行该函数。其函数原型如下:
DWORD ThreadProc(LPVOID lpParameter);
lpvThreadParam:表示向线程函数传递的参数
fdwCreate:表示线程创建的标志。CREATE_SUSPENDED表示线程创建后立即被挂起,
只有调用ResumeThread()才开始执行该函数; STACK_SIZE_PARAM_IS_A_RESERVATION表示cbStack参数不被忽略
lpIDThread:表示一个整型指针,用于接受线程的ID,线程ID在系统范围内唯一标志
线程。如果该参数是NULL,表
示线程ID不被返回
示例:利用创建线程函数创建一个多线程应用程序,作用是使程序在循环操作过程中能响应界面操作
注意:ThreadProc不是对话框的成员函数
DWORD _stdcall ThreadProc(LPVOID lpParameter)
{
CMutilThreadDlg *pdlg=(CMutilThreadDlg *)lpParameter;//注意,定义一个CMutilThreadDlg的对象
CString count;
for(int i=0;i<99999;i++)
{
count.Format("%d",i);
pdlg->m_current.SetWindowText(count);
count.ReleaseBuffer();
}
return 0;
}
void CMutilThreadDlg::OnButton1()
{
m_hThread=CreateThread(NULL,0,ThreadProc,this,0,NULL);
}