我设置了触发不了
//设置等待超时定时器
m_nTimer = SetTimer(1, 5000, NULL);void CServer_TransfersDlg::OnTimer(UINT nIDEvent) 
{
switch(nIDEvent)
{
//ID为1的计时器
case 1:
{
//结束ID为1的计时器
KillTimer(1); //告诉对方发送等待被取消
for (int i=0;i<50;i++)
{
if (m_psockClient[i]!=NULL)
{
CMessage* pMsg = new CMessage(CANCEL);
m_psockClient[i]->SendMsg(pMsg); delete pMsg;
}
} MessageBox(_T("等待超时"), _T(" 警告"), MB_ICONEXCLAMATION); break;
}
//ID为2的计时器
case 2:
{
//结束ID为2的计时器
KillTimer(2);
//结束监听
CSocket sockClient;
sockClient.Create();
sockClient.Connect(_T("127.0.0.1"), m_wPort + PORT);
sockClient.Close();
break;
}
} CDialog::OnTimer(nIDEvent);
}
当运行到m_nTimer = SetTimer(1, 5000, NULL);
时应该会触发OnTimer函数把,他怎么就不进去呢?

解决方案 »

  1.   

    你的SetTimer在哪里调用的呢?成功了吗?
      

  2.   

    我在打开文件的时候调用的
    代码运行的时候就是进不到OnTimer里面所以才来问额
      

  3.   

    void CServer_TransfersDlg::OnBnClickedButton2()
    {
    // TODO: 在此添加控件通知处理程序代码
    CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "所有文件 (*.*)|*.*||", this);
    dlg.m_ofn.lpstrTitle = _T("打开");//设置等待超时定时器
    m_nTimer = SetTimer(1, 50000, NULL);
    if(dlg.DoModal() == IDOK)
    {
    m_strPath = dlg.GetPathName();
    m_strFileName = dlg.GetFileName();
    SetDlgItemText(IDC_EDIT1,m_strPath); //打开文件
    CFile file(m_strPath, CFile::modeRead);
    //获取文件大小
    m_dwFileSize = file.GetLength(); m_strFileSize.Format("%ld 字节", m_dwFileSize);
    GetDlgItem(IDC_FILE_NAME)->SetWindowText(dlg.GetFileName());
    GetDlgItem(IDC_FILE_SIZE)->SetWindowText(m_strFileSize);
    GetDlgItem(IDC_TRANSFERS_TIP)->SetWindowText(_T("已发送:")); //关闭文件
    file.Close();
    UpdateData(FALSE); //发出文件发送请求
    for (int i=0;i<50;i++)
    {
    if (m_psockClient[i]!=NULL)
    {
    CMessage* pMsg = new CMessage(REQUEST, m_strFileName, m_dwFileSize);
    m_psockClient[i]->SendMsg(pMsg);
    }
    }

    GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
    }
    }
      

  4.   

    我想的话,可能是这样的,你SetTimer了以后,确实是进入了OnTimer函数中,但是进入了OnTimer以后调用第一句KillTimer了,也就说你只响应一次WM_TIMER消息。但是你后面的操作CFileDialog操作了你指定的5s。。
      

  5.   

    你的什么意思呢?我去掉KillTimer也还是没用、、、
      

  6.   

    你是怎么知道没走进去的,如果用debug跟踪就很蹊跷,如果靠的发送的消息判断的话,请检查你的消息发送机制
      

  7.   

    我用debug断点F5结合F10难道不能确定?