多线程显示进度条,子线程耗时10s,主线程在这10s中不停的刷新、显示,进度条界面。
来源:互联网 发布:java去掉字母和数字 编辑:程序博客网 时间:2024/06/06 01:05
进度条的进度创建两个新的线程控制,当单击“按钮时”,就创建两个个线程,一个线程用来耗时10s,一个线程耗时10s内,设置进度条的位置,通过改变进度条的位置,让主线程在这10s内不停的更新、显示进度条。
步骤如下:
(1)在资源视图中,拖入进度条控件。
设置进度条控件相关的变量 m_progress
在头文件中
声明线程函数
static DWORD WINAPI ThreadSpeed(LPVOID lpParameter);
static DWORD WINAPI ThreadSpeed1(LPVOID lpParameter);
(2)按按钮中新创建两个线程
void CprogressctrolDlg::OnBnClickedOk()
{
CreateThread(NULL,0,ThreadSpeed1,NULL,0,NULL); //创建线程
CreateThread(0,0,ThreadSpeed,&m_progress,0,0); //创建线程 //
}
第二个创建的线程的函数第四个参数,线程传入参数,传入的是一个与控件关联的变量的地址。这个参数到后面定义线程的起始函数时,要用到。
线程函数实现如下:
DWORD WINAPI CprogressctrolDlg::ThreadSpeed(LPVOID lpParameter)
{
CProgressCtrl *Speed = (CProgressCtrl*)lpParameter;
Speed->SetRange(0,100 )
while(1)
{
CTime t =CTime::GetCurrentTime();
s1=t.GetSecond();
if(s1<s)
s1+=59;
s2=s1-s;
if(s2>10)
break;
Speed->SetPos(s2*10);
}
return 0;
}
}
DWORD WINAPI CprogressctrolDlg::ThreadSpeed1(LPVOID lp
Parameter)
{
CTime t =CTime::GetCurrentTime();
s=t.GetSecond();
Sleep(1000);
return 0;
}
总结:
ThreadSpeed1函数,得到当前的系统时间后延时10s。把当前的系统时间秒数保存在,全局变量s中。
ThreadSpeed函数,不停的循环,首先得到当前的系统时间,保存到全局变量s1中,当s1<s,时,加59秒,s1-s的值赋值给全局变量s2,在循环总,10s内设置进度条的位置,如果s2大于10s,结束本次循环。在这个函数设置进度条,相当于改变了主线程进度条控件,主线程便会不停的更新显示进度条。
创建线程 CreateThread(0,0,ThreadSpeed,&m_progress,0,0); 时传入的参数,&m_progress,这个参数会传递给线程函数,这里传递的是一个控件变量的地址,是应为我们要对控件进行操作,然主线程改变控件的显示。
线程函数声明为类的静态函数的原因:如果不是静态函数,调用时需要定义一个对象,有对象才能调用该函数。这里定义为类的静态函数,因为静态函数不属于任何对象,可以直接调用,也可以将线程函数定义为一个全局变量。
步骤如下:
(1)在资源视图中,拖入进度条控件。
设置进度条控件相关的变量 m_progress
在头文件中
声明线程函数
static DWORD WINAPI ThreadSpeed(LPVOID lpParameter);
static DWORD WINAPI ThreadSpeed1(LPVOID lpParameter);
(2)按按钮中新创建两个线程
void CprogressctrolDlg::OnBnClickedOk()
{
CreateThread(NULL,0,ThreadSpeed1,NULL,0,NULL); //创建线程
CreateThread(0,0,ThreadSpeed,&m_progress,0,0); //创建线程 //
}
第二个创建的线程的函数第四个参数,线程传入参数,传入的是一个与控件关联的变量的地址。这个参数到后面定义线程的起始函数时,要用到。
线程函数实现如下:
DWORD WINAPI CprogressctrolDlg::ThreadSpeed(LPVOID lpParameter)
{
CProgressCtrl *Speed = (CProgressCtrl*)lpParameter;
Speed->SetRange(0,100 )
while(1)
{
CTime t =CTime::GetCurrentTime();
s1=t.GetSecond();
if(s1<s)
s1+=59;
s2=s1-s;
if(s2>10)
break;
Speed->SetPos(s2*10);
}
return 0;
}
}
DWORD WINAPI CprogressctrolDlg::ThreadSpeed1(LPVOID lp
Parameter)
{
CTime t =CTime::GetCurrentTime();
s=t.GetSecond();
Sleep(1000);
return 0;
}
总结:
ThreadSpeed1函数,得到当前的系统时间后延时10s。把当前的系统时间秒数保存在,全局变量s中。
ThreadSpeed函数,不停的循环,首先得到当前的系统时间,保存到全局变量s1中,当s1<s,时,加59秒,s1-s的值赋值给全局变量s2,在循环总,10s内设置进度条的位置,如果s2大于10s,结束本次循环。在这个函数设置进度条,相当于改变了主线程进度条控件,主线程便会不停的更新显示进度条。
创建线程 CreateThread(0,0,ThreadSpeed,&m_progress,0,0); 时传入的参数,&m_progress,这个参数会传递给线程函数,这里传递的是一个控件变量的地址,是应为我们要对控件进行操作,然主线程改变控件的显示。
线程函数声明为类的静态函数的原因:如果不是静态函数,调用时需要定义一个对象,有对象才能调用该函数。这里定义为类的静态函数,因为静态函数不属于任何对象,可以直接调用,也可以将线程函数定义为一个全局变量。
0 0
- 多线程显示进度条,子线程耗时10s,主线程在这10s中不停的刷新、显示,进度条界面。
- C#代码片段 在工作线程中刷新主界面线程的进度条显示
- 在Android的Notification中显示进度条
- 在Android的Notification中显示进度条
- 在Android的Notification中显示进度条
- 在Android的Notification中显示进度条
- 在DBGridEh中显示进度条
- 安卓跨界面显示进度条
- 多线程显示进度条
- 多线程进度条显示
- 【NCRE】--- 多线程显示进度条
- 多线程编程子线程访问主线程的界面
- WPF 多线程---- 子线程操作界面主线程的元素
- android多线程,子线程与主线程的通信,下载的文件的显示
- 子线程控制主线程中UI显示
- 关于多线程执行显示进度条的实例
- 关于多线程执行显示进度条的实例!
- b/s系统导出excel时显示进度条
- 可以让你少奋斗十年的工作经验(转)
- avaya dhcp option
- 鱼眼镜头的分类
- vs2008使用gsoap调用WeatherWS
- C# 使用二进制 逻辑(与、或、非)位移运算 控制系统权限
- 多线程显示进度条,子线程耗时10s,主线程在这10s中不停的刷新、显示,进度条界面。
- VLSI test 复习所得
- struts2文件下载
- Xcode6下学习autolayout 一
- Windows8下PhoneGap 4 + Android Studio 1.0 + VS2013配置指南
- 使用LINQ读取分隔符文本文件
- 使用angularjs 编辑数组
- vim、gvim在windows下中文乱码的终极解决方案
- Sql store procedure partten 存储过程样式