不响应OnTimer函数,请求帮助

lanxue84 2008-09-27 10:02:47
代码如下:
BEGIN_MESSAGE_MAP(CBandwidthDlg, CDialog)
//{{AFX_MSG_MAP(CBandwidthDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_SHOW, OnBtnShow)
ON_BN_CLICKED(IDC_BTN_SEND, OnBtnSend)
ON_BN_CLICKED(IDC_BTN_RESET, OnBtnReset)
ON_WM_TIMER()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_RECVDATA,OnRecvData)
END_MESSAGE_MAP()


BOOL CBandwidthDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

.......

srand((unsigned)time(NULL));

m_iTmCounter = 0;
m_bIsStart = FALSE;
m_bIsover = FALSE;
m_iRndForSend = rand()%100;

InitSocket();
RECVPARAM *pRecvParam=new RECVPARAM;
pRecvParam->sock=m_socket;
pRecvParam->hwnd=m_hWnd;
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);

SetTimer(1,1000,NULL);

return TRUE; // return TRUE unless you set the focus to a control
}

void CBandwidthDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (m_bIsStart)
{
m_iTmCounter++;
m_iTmCounter %=TIMESPAN;
}
else return;

if (m_iTmCounter == m_iRndForSend)
{
// SendToMainAgt();
Send();
}
if (m_iTmCounter == 0)
{
m_iRndForSend = rand()%100;
}
CDialog::OnTimer(nIDEvent);
}


运行时一秒后对话框自动就消失了,调试运行发现程序根本就没有响应OnTimer()函数,执行到SetTimer()后就没了,请问是什么原因?谢谢
...全文
305 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
chucongqing 2012-05-08
  • 打赏
  • 举报
回复
Onpaint()函数里没有 CLientDC(this) OnTimer 不响应.... 消息优先级问题貌似
lanxue84 2008-10-06
  • 打赏
  • 举报
回复
问题找到了
谢谢楼上各位
lanxue84 2008-09-30
  • 打赏
  • 举报
回复
没人帮忙了啊
SetTimer和编写OnTimer函数没有先后顺序吧?
怎么就不执行OnTimer函数呢
VCSQLVB 2008-09-27
  • 打赏
  • 举报
回复
InitSocket(); 里怎么实现的,感觉内存溢出.
datoucaicai 2008-09-27
  • 打赏
  • 举报
回复
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);

这个创建成功了没有?判断下再CloseHandle
lanxue84 2008-09-27
  • 打赏
  • 举报
回复
谢谢指点!
我用MessageBox试了试,确实没有执行OnTimer()函数
请问是什么原因?
woshizhanhun 2008-09-27
  • 打赏
  • 举报
回复
你可以在OnTimer里弹个MessageBox试试,不就知道运行没,不过把OnTimer和线程调用都放在OnInitDialog里感觉总有点不对
jinlingzwp 2008-09-27
  • 打赏
  • 举报
回复
同意楼上滴
Joephia 2008-09-27
  • 打赏
  • 举报
回复
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);

SetTimer(1,1000,NULL);


两点:
1.在有子线程的时候调试比较麻烦,不要同时给子线程函数和主线程函数设断点

2.使用CloseHandle(hThread)会导致子线程中断退出引起错误,不如不用
lanxue84 2008-09-27
  • 打赏
  • 举报
回复
InitSocket()函数里主要是实现套接字的创建和绑定

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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