发布网友 发布时间:2022-05-23 02:44
共1个回答
热心网友 时间:2023-10-10 20:36
主线程来做会阻塞界面的刷新,一般采用的是子线程来接受信息,然后通过界面窗体的句柄,实现主线程和子线程间同步,进行进度的显示的。追答那timer总会用吧?如果不好理解线程,你可以认为线程就是个timer, timer也是个线程。这样好写代码了吧?
定义个进度条变量DWORD dwCurrentLength,dwPrevLength;用于指示当前和前一次的进度条显示长度。然后在你的接收数据函数当中不断地累加它,
然后在你的主窗口当中添加一个定时器timer响应函数OnTimer() ,在当中判断一下当前是否需要刷新显示进度条。
if(dwPrevLength < dwCurrentLength)
{
//这里发送WM_PAINT消息到进度条控件的句柄,来强制刷新进度条
dwPrevLength = dwCurrentLength;
}
然后你再在点击传输数据开始的函数中添加一段代码来生成一个timer,每次开始传输数据就启动timer;
m_nTimer = SetTimer(...);
数据全部传输完毕就把这个timer终结掉。
Killtimer(m_nTimer);