windows多线程编程技术与实例(windows实现多线程编程方法)
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);//开始按钮生效
}
-
无相关信息
- 1bat的大数据(BAT的大数据来源)
- 2三星s8屏幕上端2(三星s8屏幕上端2个按键)
- 3三星屏幕坏了如何导出(三星屏幕摔坏了如何导出数据么)
- 4红米3x怎么关闭自动更新(红米k40s怎么关闭自动更新)
- 5微信上防止app自动下载软件怎么办(微信上防止app自动下载软件怎么办啊)
- 6押镖多少钱(押镖一个月有多少储备金)
- 7瑞星个人防火墙胡功能(瑞星个人防火墙协议类型有哪些)
- 8cf现在等级是多少(cf等级2020最新)
- 9老滑头多少条鱼(钓鱼老滑头有什么用)
- 10WPS自动调整语法(wps如何修改语法)
- 11dell控制面板防火墙(dell的防火墙怎么关闭)
- 12丑女技能升多少(丑女技能需要满级吗)
- 13智能家居系统怎么样(智能家居系统好吗)
- 14戴尔屏幕(戴尔屏幕闪烁)
- 15y85屏幕信息(vivoy85息屏显示时间怎么设置)
- 16魅蓝note3屏幕出现方格(魅蓝note屏幕竖条纹)
- 17v8手指按屏幕(触屏手指)
- 18金为液晶广告机(液晶广告机lb420)
- 19三星显示器怎么校色(三星显示器 调色)
- 20hkc显示器dvi音频(hkc显示器有音响么)
- 21康佳液晶智能电视机(康佳液晶智能电视机怎么样)
- 22做液晶画板电脑(做液晶画板电脑怎么操作)
- 23液晶屏极化现象原理(液晶屏极化现象原理是什么)
- 24企业网络安全防火墙(企业网络防护)
- 256splus黑屏屏幕不亮(苹果6s plus屏幕突然黑屏)
- 26充电导致屏幕失灵(充电导致屏幕失灵怎么办)
- 27超极本屏幕旋转(笔记本电脑屏幕旋转,怎么转过来?)
- 28igmp防火墙(防火墙配置ipv6)
- 29荣耀王者多少经验(王者荣耀经验多少一级)
- 30lol老将还剩多少(qg老将)