VC多线程一个实例理解(VC多线程怎么同时启动)
1 创建式程,编辑对话框资源
创建一个基于对话框的工程,添加控件,如下图所示:
各控件ID及变量如下:
2 在头文件中定义与线程相关变量
// Ch13Demo2Dlg.h
typedef struct Threadinfo{
CProgressCtrl *progress;//进度条对象
int speed;//进度条速度
int pos;//进度条位置
} thread,*lpthread;
class CCh13Demo2Dlg : public CDialog
{
……
protected:
HICON m_hIcon;
thread thread1;//线程1的结构
thread thread2;//线程2的结构
thread thread3;//线程3的结构
HANDLE hThread1;//线程1线程句柄
HANDLE hThread2;//线程2线程句柄
HANDLE hThread3;//线程3线程句柄
定义线程入口函数
// Ch13Demo2Dlg.cpp
DWORD WINAPI ThreadFun(LPVOID pthread)//线程入口函数
{
lpthread temp=(lpthread)pthread;//进度条结构体
temp->progress->SetPos(temp->pos);
while(temp->pos<20)
{
Sleep(temp->speed);//设置速度
temp->pos++;//增加进度
temp->progress->SetPos(temp->pos);//设置进度条的新位置
if(temp->pos==20)
{
temp->pos=0;//进度条满则归0
}
}
return true;
}
3 对话框控件初始化
// Ch13Demo2Dlg.cpp
BOOL CCh13Demo2Dlg::OnInitDialog()
{
BOOL CCh13Demo2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
……
m_progress1.SetRange(0,20);//设置进度条范围
m_progress2.SetRange(0,20);//设置进度条范围
m_progress3.SetRange(0,20);//设置进度条范围
GetDlgItem(IDC_PAUSE1)->EnableWindow(FALSE);//停止按钮无效
GetDlgItem(IDC_PAUSE2)->EnableWindow(FALSE);//停止按钮无效
GetDlgItem(IDC_PAUSE3)->EnableWindow(FALSE);//停止按钮无效
return TRUE;
}
// Ch13Demo2Dlg.cpp
DWORD WINAPI ThreadFun(LPVOID pthread)//线程入口函数
{
lpthread temp=(lpthread)pthread;//进度条结构体
temp->progress->SetPos(temp->pos);
while(temp->pos<20)
{
Sleep(temp->speed);//设置速度
temp->pos++;//增加进度
temp->progress->SetPos(temp->pos);//设置进度条的新位置
if(temp->pos==20)
{
temp->pos=0;//进度条满则归0
}
}
return true;
}
void CCh13Demo2Dlg::OnStar1()
{
// TODO: Add your control notification handler code here
DWORD ThreadID;
DWORD code;
//生成线程参数
thread1.progress=&m_progress1;//进度条对象
thread1.speed=100;//速度
thread1.pos=0;//初始位置
if(!GetExitCodeThread(hThread1,&code)||(code!=STILL_ACTIVE))
{
hThread1=CreateThread(NULL,0,ThreadFun,&thread1,0,&ThreadID);//创建并开始线程
}
GetDlgItem(IDC_PAUSE1)->EnableWindow(TRUE);//停止按钮生效
GetDlgItem(IDC_STAR1)->EnableWindow(FALSE);//开始按钮无效
}
void CCh13Demo2Dlg::OnStar2()
{
// TODO: Add your control notification handler code here
DWORD ThreadID;
DWORD code;
//生成线程
thread2.progress=&m_progress2;//线程结构
thread2.speed=200;
thread2.pos=0;
if(!GetExitCodeThread(hThread2,&code)||(code!=STILL_ACTIVE))
{
hThread2=CreateThread(NULL,0,ThreadFun,&thread2,0,&ThreadID);//创建线程
}
GetDlgItem(IDC_PAUSE2)->EnableWindow(TRUE);//停止按钮生效
GetDlgItem(IDC_STAR2)->EnableWindow(FALSE);//开始按钮无效
}
void CCh13Demo2Dlg::OnStar3()
{
// TODO: Add your control notification handler code here
DWORD ThreadID;
DWORD code;
//生成线程
thread3.progress=&m_progress3;//线程结构
thread3.speed=200;
thread3.pos=0;
if(!GetExitCodeThread(hThread3,&code)||(code!=STILL_ACTIVE))
{
hThread3=CreateThread(NULL,0,ThreadFun,&thread3,0,&ThreadID);//创建线程
}
GetDlgItem(IDC_PAUSE3)->EnableWindow(TRUE);//停止按钮生效
GetDlgItem(IDC_STAR3)->EnableWindow(FALSE);//开始按钮无效
}
void CCh13Demo2Dlg::OnPause1()
{
// TODO: Add your control notification handler code here
DWORD code;
if(GetExitCodeThread(hThread1,&code))
if(code==STILL_ACTIVE)//如果当前线程还活动
{
TerminateThread(hThread1,0);//前些终止线程
CloseHandle(hThread1);//销毁线程句柄
}
GetDlgItem(IDC_PAUSE1)->EnableWindow(FALSE);//停止按钮无效
GetDlgItem(IDC_STAR1)->EnableWindow(TRUE);//开始按钮生效
}
void CCh13Demo2Dlg::OnPause2()
{
// TODO: Add your control notification handler code here
DWORD code;
if(GetExitCodeThread(hThread2,&code))
if(code==STILL_ACTIVE)
{
TerminateThread(hThread2,0);
CloseHandle(hThread2);
}
GetDlgItem(IDC_PAUSE2)->EnableWindow(FALSE);//停止按钮无效
GetDlgItem(IDC_STAR2)->EnableWindow(TRUE);//开始按钮生效
}
void CCh13Demo2Dlg::OnPause3()
{
// TODO: Add your control notification handler code here
DWORD code;
if(GetExitCodeThread(hThread3,&code))
if(code==STILL_ACTIVE)
{
TerminateThread(hThread3,0);
CloseHandle(hThread2);
}
GetDlgItem(IDC_PAUSE3)->EnableWindow(FALSE);//停止按钮无效
GetDlgItem(IDC_STAR3)->EnableWindow(TRUE);//开始按钮生效
}
相关问答
-
小学语文片段教学模板二年级 小学语文片段教学模板二年级语文教
小学二年级是语文教育中的重要阶段,也是培养学生语文素养的关键时期。在教学中,语文片段教学是一种有效的教学方式。那么,在小学二年
阅读更多 -
小学英语教学课件制作作品参考 小学英语教学课件制作的技巧和实
作为一名小学英语教师,如何制作出优质的教学课件是一项必备的技能。好的教学课件不仅能够提高学生的学习兴趣,还能够让教师更好地传
阅读更多 -
抽象思想在小学数学中的实例 小学数学中的抽象思想实例
抽象思想是一种重要的思维方式,它不仅存在于高等数学中,也存在于小学数学中。在小学数学教学中,抽象思想是培养学生严密逻辑思维和分
阅读更多 -
小学数学假设法教学实例
小学数学教学是培养学生数学思维和解决实际问题的关键时期。假设法是一种重要的数学解题方法,它可以帮助学生发现问题的本质和规律
阅读更多 -
小学数学大单元主题教学设计实例
小学数学教育是孩子学习生涯中最为重要的一环,而大单元的主题教学更是为学生提供了一个全面而深入的学习体验。设计一个好的主题教
阅读更多 -
小学数学思想方法的渗透实例 小学数学思想方法如何在日常生活中
小学数学思想方法在我们的日常生活中无处不在,它们不仅仅是一些简单的数学知识点,更是一种思维方式和方法论。今天,我们就来看看小学
阅读更多
最新问答
-
奋进新时代做好接班人作文范文
2024-05-17 -
山西省(2024)特岗教师招聘公告发布
2024-05-17 -
河南多所高校公布暑假时间
2024-05-17 -
中国音乐学院本科招生章程2024年
2024-05-17 -
首都经济贸易大学本科招生章程2024具体情况
2024-05-17 -
中国戏曲学院2024本科招生章程发布
2024-05-17 -
北京舞蹈学院(2024)本科招生章程
2024-05-17 -
2024山东高考少数民族加分政策
2024-05-17 -
2024广东省二本院校排名
2024-05-17 -
2024年高考时间是几月几号
2024-05-17