本来在主程序中添加一个SetTimer的函数,主要用于控制主界面上的显示问题。
现在另外加了一个线程,将线程中的值通过全局变量传递给另外一个界面。
class CUploadDisplay : public CDialog
...
public:
UINT m_nUploadTimer;
...在主程序中:
CUploadDisplay uploadDisplay;
CWinThread* pThread = AfxBeginThread(uploadThreadRunInBackGround,0);
uploadDisplay.m_nUploadTimer = uploadDisplay.SetTimer(1, 200, NULL);在子界面中添加:
void CUploadDisplay::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
//display progress on other dlg
CString tempStatus;
m_DisplayStatus.GetWindowText(tempStatus);
if(tempStatus != up.uploadStatus)
{
m_DisplayStatus.SetWindowText(up.uploadStatus);
}

//display the status of the progress
if (GetDlgItem(IDC_PROGRESS_UPLOAD) != NULL)
{
if (((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_UPLOAD))->GetPos() != up.uploadPercent)
{
((CProgressCtrl*)GetDlgItem(IDC_PROGRESS_UPLOAD))->SetPos(up.uploadPercent);
}
} if(g.uploadSign)
{
// KillTimer(m_nUploadTimer);
} CDialog::OnTimer(nIDEvent);
}但是并不像主程序中的settimer函数那样,一点反应也没有。请高手指点,万分感谢。

解决方案 »

  1.   

    Timer需要消息循环,主线程窗口中有...
      

  2.   

    你仅仅添加函数是没有用的,还需要映射这个消息,在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏之间,你应该有一行ON_WM_TIMER()
      

  3.   

    线程又不是函数
    线程中的值通过全局变量传递,这个有问题如果是子窗口 检查一下是不是2个定时器都是1 你的定时器 nIDEvent要鉴别
      

  4.   

    CUploadDisplay只是构造了对象,并没有创建窗口,所以不能响应定时。
      

  5.   


    添加函数是通过添加WM_TIMER的消息实现的,这个应该没有问题。