关于OnTimer()函数的问题?

wangsiyuanoo 2009-02-06 02:48:13
BOOL CFindFileDlg::OnInitDialog()
{
CDialog::OnInitDialog();

SetTimer(TIME_PROGRESS, 1000, NULL); //放在初始化函数中,会响应OnTimer()函数

return TRUE;
}

//“查找” -- 按钮
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //放在一个按钮响应函数中,就不会响应到OnTimer()函数!请问这是什么原因啊????
}
...全文
358 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人乙2019 2009-02-10
  • 打赏
  • 举报
回复
同意11楼的,有按钮中肯定是可以响应的,看你定时器响应函数怎么写的。
xunhangchengwen 2009-02-09
  • 打赏
  • 举报
回复
说的挺清楚的
rdsnow 2009-02-09
  • 打赏
  • 举报
回复
MARK WM_TIMER 是个优先级很低的消息,是个很容易被丢弃的!

在系统忙于处理其他消息的时候,这个消息常常被丢弃!
yuanhuan799 2009-02-09
  • 打赏
  • 举报
回复
//“查找” -- 按钮
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
KillTimer(TIME_PROGRESS);
SetTimer(TIME_PROGRESS, 1000, NULL);
}
luckyboy101 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wltg2001 的回复:]
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}
===================
这是正常的啊,你这是单线程程序,一个函数没有结束当然不…
[/Quote]
说的很对
wltg2001 2009-02-09
  • 打赏
  • 举报
回复
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}
===================
这是正常的啊,你这是单线程程序,一个函数没有结束当然不会去响应OnTimer函数了,定时器并不是多线程,它还是单线程的。
wltg2001 2009-02-09
  • 打赏
  • 举报
回复
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}
===================
这是正常的啊,你这是单线程程序,一个函数没有结束当然不会去响应OnTimer函数了,定时器并不是多线程,它还是单线程的。
Allen_zhang 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangsiyuanoo 的回复:]
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}
[/Quote]

这个肯定不会这么快响应的,OnBnClickedSearchFileByTime这个消息都还没有处理完呢
需要等这个消息处理完才会处理wm_timer消息的

你这是要更新一下进度条吧?
不需要用timer来更新的

在你的OnBnClickedSearchFileByTime消息中起一个线程来处理RefreshList();这个
然后在RefreshList();中动态的更新进度条就可以了

csgdseed 2009-02-08
  • 打赏
  • 举报
回复
应该会响应
hityct1 2009-02-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangsiyuanoo 的回复:]
C/C++ codevoid CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}



[/Quote]
使用线程,将RefreshList();放在线程中。
ckitterl 2009-02-07
  • 打赏
  • 举报
回复
贴出Ontimer函数,估计是那里出问题了
weidong0210 2009-02-06
  • 打赏
  • 举报
回复
应该会去响应
wangsiyuanoo 2009-02-06
  • 打赏
  • 举报
回复
void CFindFileDlg::OnBnClickedSearchFileByTime()
{
SetTimer(TIME_PROGRESS, 1000, NULL); //这样写的话,似乎不能立即响应到OnTimer()函数,而是要等RefreshList()函数结束了才响应
//我是想RefreshList()的同时也会1秒调一次OnTimer()函数
RefreshList();
}

fishion 2009-02-06
  • 打赏
  • 举报
回复
刚刚试过都可以的,,怎么就你的不可以了
OnTimer()函数是怎么的
loseway 2009-02-06
  • 打赏
  • 举报
回复
按钮里的计时器应该是点击后才能触发。
wangsiyuanoo 2009-02-06
  • 打赏
  • 举报
回复
SetTimer都返回1
但就是按钮响应里还是不会响应的
dxk01 2009-02-06
  • 打赏
  • 举报
回复
放在按钮响应函数中是可以的,你可以看看SetTimer的返回值

15,979

社区成员

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

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