如何在vc程序中实现每天的固定时刻(比如12:00)触发程序的一个事件?程序中三个定时器会不会冲突?

windy2004 2005-01-18 10:49:42
我的程序需要每天的某个时间触发一个事件.我现在是每分钟获得一次系统时间然后比较.可是程序总是在那个时候出问题.我触发的事件执行完需要时间较长(比1分钟长),而且我的程序中有三个定时器,这个定时触发的只是是其中一个.不知是什么原因导致出错.请教各位大侠该怎么解决?焦急在线等待...
...全文
331 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2005-01-21
  • 打赏
  • 举报
回复
定事情里面最好不要直接执行回调!尤其是复杂得回调!会阻塞定时器!可以定时器发送消息到一个任务!然后任务执行函数主题。
windy2004 2005-01-21
  • 打赏
  • 举报
回复
我还有个问题:
我的程序中的两个定时器一个是10秒一次,另一个是60秒一次,当某一时刻,这两个定时器都符合了触发的条件,可是消息队列中只会有一个wm-time,就只会触发一个定时器。怎样才能保证两个定时器都能触发呢?
windy2004 2005-01-21
  • 打赏
  • 举报
回复
void CGPRSDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 1: //对话框形成后一秒钟自动触发按钮事件
KillTimer(1);
OnBtnListen();
break;
/* case 2: //每10秒种从数据中读取信息
KillTimer(2);
GetOperations();
SetTimer(2,10000,NULL);
break;
case 3: //每分钟取系统时间若为23:30则
执行一项操作
{
CTime t=CTime::GetCurrentTime();
CString time = t.Format( "%H:%M" );
if(time=="23:30")
{
KillTimer(2);
KillTimer(3);
m_strCJQID="0000";
t=CTime::GetCurrentTime();
m_strCOMMAND=t.Format( "C010%Y%m%d%H%M%S" );
ControlSend();
SetTimer(3,60000,NULL);
SetTimer(2,10000,NULL);
}
}
break;}
CDialog::OnTimer(nIDEvent);
}//end of ontimer
这是我原来的ontimer,可是试运行了十几个小时后出错了,或者没有出错可是第三个定时器没有发挥作用。然后我按照前几楼高手的指导把定时器中执行的内容放在了线程中,可是情况没有变化。后来我想到用不同的回调函数试试,可是不会写。现在我也不知道该怎么解决了,哪位能够给出比较可靠的解决办法?
zhaogaojian 2005-01-21
  • 打赏
  • 举报
回复
按时间如果执行之后,设置一个执行完成的标志,
用一个结构体
typedef struct task
{

CTime task_starttime;//任务开始时间
CTime task_nexttime;//下次任务执行时间
CTime task_endtime;//任务结束时间
CTime task_pretime;//上次任务日期
BOOL task_endflag;//是否有终止日期

}TASK;
否则比较当前“时间”是不是大于“设定的下次执行时间”,如果执行完之后
"设定的下次执行时间+1天",有几十个任务都没问题
rabo 2005-01-21
  • 打赏
  • 举报
回复
开个TIMER读时间啥.....读CTime...
一分钟读一次啥.

而且你出了什么问题你也没说....
时间到了,你执行你的函数时停掉TIMER,执行完了再开始TIMER.
Caps77 2005-01-21
  • 打赏
  • 举报
回复
定时器的响应函数只能用ONTIMER,楼主想干啥?OMTIMER不能解决么?你可以自己写个函数给ONTIMER调用啊
xjtuzhw 2005-01-21
  • 打赏
  • 举报
回复
还是利用OnTime直接读取当前的时间做一个自定义消息好了
随便你加多少相关的时间触发事件
cnwww 2005-01-21
  • 打赏
  • 举报
回复
程序中三个定时器会不会冲突? 不会!

定时器的响应函数只能用ONTIMER?错!可以为每个定时器设不同的Callback function.
fengge8ylf 2005-01-21
  • 打赏
  • 举报
回复
定时器用线程来代替  在线程里sleep()
windy2004 2005-01-20
  • 打赏
  • 举报
回复
多谢指导!
还想请教一个问题:
定时器的响应函数可以不用缺省的ontimer,可是不知道自定义的响应函数怎么写,哪位高手给个例子学习一下?感激。。。
Caps77 2005-01-18
  • 打赏
  • 举报
回复
3个定时器开3个线程执行,不要都放在主线程里,如果主线程执行1分钟的程序,1分钟内定时器不起作用
jqcj 2005-01-18
  • 打赏
  • 举报
回复
定时触发后开一个线程执行事件
gdy119 2005-01-18
  • 打赏
  • 举报
回复
同意楼上!

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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