QQ网名大全

求一个windows下的多线程的例子,不要linux下的!

下面是一个用VC编的最简单的多线程例子,希望对你有帮助。
1. 建立一个基于对话框的工程MultiThread1,在对话框IDD_MULTITHREAD1_DIALOG中加入两个按钮和一个编
辑框,两个按钮的ID分别是IDC_START,IDC_STOP ,标题分别为“启动”,“停止”,IDC_STOP的属性选中
Disabled;编辑框的ID为IDC_TIME ,属性选中Read-only;
 
2. 在MultiThread1Dlg.h文件中添加线程函数声明:
void ThreadFunc();
注意,线程函数的声明应在类CMultiThread1Dlg的外部。 在类CMultiThread1Dlg内部添加protected型变量:
HANDLE hThread;
DWORD ThreadID;
分别代表线程的句柄和ID。
 
3. 在MultiThread1Dlg.cpp文件中添加全局变量m_bRun :BOOL m_bRun;
m_bRun 代表线程是否正在运行。

编写线程函数:
void ThreadFunc()
{
CTime time;
CString strTime;
m_bRun=TRUE;
while(m_bRun)
{
time=CTime::GetCurrentTime();
strTime=time.Format("%H:%M:%S");
::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);
Sleep(1000);
}
}
该线程函数没有参数,也不返回函数值。只要m_bRun为TRUE,线程一直运行。
双击IDC_START按钮,完成该按钮的消息函数:
void CMultiThread1Dlg::OnStart()
{
// TODO: Add your control notification handler code here
hThread=CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunc,
NULL,
0,
&ThreadID);
GetDlgItem(IDC_START)->EnableWindow(FALSE);
GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
}
双击IDC_STOP按钮,完成该按钮的消息函数:
void CMultiThread1Dlg::OnStop()
{
// TODO: Add your control notification handler code here
m_bRun=FALSE;
GetDlgItem(IDC_START)->EnableWindow(TRUE);
GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}
佚名
2024-06-04 06:55:36
最佳回答
类似问题(10)