如何实时显示流逝时间?

hbdywt 2007-01-12 04:01:19
我想实现这样的功能:
当按start按钮时,开始执行一个线程,当线程执行时在一个edit控件框内实时显示这个线程运行了多长时间,当线程结束时,计时结束。
本来想在一个死循环中用下面的函数来实现,然后在线程结束时传出一个消息结束循环。
while(!endFlag)
{
Sleep(1000);
SetDlgItemInt(IDC_ELPTIME, count++, FALSE);
}

线程结束时传出一个消息,令endFlag=true;
结果进到循环里出不来不说,edit里的数值一直也没发生变化。

我刚刚接触mfc,不知道要实现这样的功能应该采用什么样的结构,请大家指教。
...全文
245 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbdywt 2007-01-12
  • 打赏
  • 举报
回复
线程开始运行的时候,IDC_THREAD_TIME的时间没有变化,但是线程结束以后,倒是开始计时了(为了测试没有传出线程结束的消息),不知是不是线程间的优先级的问题,我的线程是按默认参数产生的。
modena 2007-01-12
  • 打赏
  • 举报
回复
1. 线程中不建议直接处理界面元素,而是通过PostMessage的方式通知界面线程改变状态;
2. 如果你的线程是循环线程,那么可以在循环元素里面PostMessage通知界面线程做计时处理;
3. 非循环线程,建议开单独线程处理对线程的计时,或者简单通过界面线程的SETTIMER处理。

建议:

SetTimer( 1, 1000, NULL );
m_dwStartTime = GetTickCount();
m_hThread = CreateThread( ... );

...

WaitForSingleObject( m_hThread );// 或者你知道线程退出的地方
m_dwEndTime = GetTickCount();

...

CMyDialog::OnTimer( UINT n )
{
if( n == 1 )
{
DWORD dwTimeSpan = GetTickCount() - m_dwStartTime;
CTimeSpan t(dwTimeSpan);
CString str = t.Format( _T("%H小时%M分%S秒") );
((CEdit *)GetDlgItem(IDC_THREAD_TIME))->SetWindowText(str);
}
...
}


15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧