用timeSetEvent定时显示的错误
在一个对话框程序中使用了下面的代码void CALLBACK internalTimerProc(UINT id,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2)
{
((CtimerDlg *)(AfxGetApp()->m_pMainWnd))->printval();
}
void CtimerDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
timeSetEvent(30,1,internalTimerProc,(DWORD)this,TIME_ONESHOT);
}
void CtimerDlg::printval()
{
// TODO: 在此添加控件通知处理程序代码
//OnOK();
CTime t=CTime::GetCurrentTime();
m_str=t.Format("%H %M %S");
UpdateData(FALSE);
}
但一执行updatedata就出现错误,为什么???? --------------------编程问答-------------------- 跨线程
try
改用消息方式
--------------------编程问答-------------------- 主要错误原因,消息级别问题,计时器消息的优先级是非常低的,一旦有一个一般消息进来,他就会立即停止去执行别的了。上例中UpdateData(FALSE); 发出的消息级别远远高于timer,所以会出错!!! --------------------编程问答-------------------- 同意1楼观点。不同意2楼的。
另外,如果不是实在有必要,建议不要使用timeSetEvent。虽然他的精度比window的timer精度高,但由于他的回调函数不运行于UI线程,而且微软也不建议使用Control.Invoke阻塞该回调函数(会导致其它多媒体应用阻塞),使用该函数会相对比较麻烦。 --------------------编程问答-------------------- 跨线程的东西要向工作线程发送消息来响应 同步问题
补充:.NET技术 , VC.NET