控制台程序怎样实现Timer

sxsong_04 2009-03-04 08:18:24
就是想每隔相同的一段时间执行一次计算,这个怎样才能实现
...全文
364 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiantianpingping 2010-07-20
  • 打赏
  • 举报
回复
我目前遇到同样的问题,发送端需要定时发送,还能保证接收端有足够时间接受数据,并采取一些数据处理的措施,一旦没有定时发送,接收端就会无响应。sleep和timer到底哪个好啊?
jakqigle 2009-03-04
  • 打赏
  • 举报
回复
关注...
cnp11 2009-03-04
  • 打赏
  • 举报
回复
SetTimer( hWnd, // 窗口句柄
ID_TIMER_POWER, //窗口消息
1000, //定时器触发时间 ms
reset_power //触发函数名
);
arong1234 2009-03-04
  • 打赏
  • 举报
回复
10楼固然可以做一个定时器出来,但是楼主的应用实际上更应该不使用定时器,是楼主和他同事对网络设计的误解才使得他们认为需要定时和"同步"的
arong1234 2009-03-04
  • 打赏
  • 举报
回复
这只能让你获得时差,却不能达到“到某个时刻做某事情”的效果
如果你循环调用这个函数,就会导致你CPU被疯狂占用
所以网上说很多“精确”的定时器其实都不是定时器,只是时间测量函数而已,而这些函数时不能用作定时器的

[Quote=引用 11 楼 amei2000go 的回复:]
老老实实的开线程用
GetTickCount可以到18-20ms进度
timeGetTime可以到1ms精度
这些函数来做定时器吧
[/Quote]
healer_kx 2009-03-04
  • 打赏
  • 举报
回复
UP 10楼的。
梅文海 2009-03-04
  • 打赏
  • 举报
回复
老老实实的开线程用
GetTickCount可以到18-20ms进度
timeGetTime可以到1ms精度
这些函数来做定时器吧
lightnut 2009-03-04
  • 打赏
  • 举报
回复

#include <windows.h>
#include <iostream>

//after call MyTimeProce MAX_TIMER_CALLED times, kill the timer and quit the application
const int MAX_TIMER_CALLED = 100;

//timer procedure
void CALLBACK MyTimerProc( HWND hwnd, UINT uMsg,UINT_PTR idEvent,DWORD dwTime );

//console application entry point
int main()
{
// Set the timer.
UINT_PTR IDT_TIMER = 1; // timer identifier
SetTimer( NULL, // handle to main window
IDT_TIMER, // timer identifier
100, // 1-second interval
(TIMERPROC) MyTimerProc); // timer callback



// we need a message loop to deal with the timer event
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return 0;
}

// implementation of MyTimerProc
void CALLBACK MyTimerProc( HWND hwnd, UINT uMsg,UINT_PTR idEvent,DWORD dwTime )
{
static int nCalled = 0;
++nCalled;
std::cout << "MyTimerProc called " << nCalled << " times" << std::endl;

if ( nCalled >= MAX_TIMER_CALLED ) {
KillTimer(hwnd, idEvent); // kill the timer
PostMessage(NULL, WM_QUIT, 0, 0); // quit the application
}
}

  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sxsong_04 的回复:]
我打算把计算好的数据通过网络发出去,另一端接收,现在接收端有一个Timer(MFC),如果我这边用Sleep能同步吗
[/Quote]
把数据通过网络发出去..干吗要计时啊?还是没看明白楼主意图.
resultridgepole 2009-03-04
  • 打赏
  • 举报
回复
如果你是发送接收,干嘛要同步呢,用一个socket类,然后listening着就行了吧,如果要通过sleep同步,基本是不可能的,尤其是在不同的计算机不同的网络环境下。
arong1234 2009-03-04
  • 打赏
  • 举报
回复
都根你说了timer不准的,他接收端的timer都不准,你这边即使准确了也无法同步啊
再说,网络接收要同步干吗?他难道不是有数据接收?如果不是这样设计,那也太土了。接收要啥定时器?

[Quote=引用 5 楼 sxsong_04 的回复:]
我打算把计算好的数据通过网络发出去,另一端接收,现在接收端有一个Timer(MFC),如果我这边用Sleep能同步吗
[/Quote]
sxsong_04 2009-03-04
  • 打赏
  • 举报
回复
这边的计算是需要一定时间的,而且时间不定
sxsong_04 2009-03-04
  • 打赏
  • 举报
回复
我打算把计算好的数据通过网络发出去,另一端接收,现在接收端有一个Timer(MFC),如果我这边用Sleep能同步吗
xianyuxiaoqiang 2009-03-04
  • 打赏
  • 举报
回复
sleep
ysysbaobei 2009-03-04
  • 打赏
  • 举报
回复
mark,顶
OenAuth.Net 2009-03-04
  • 打赏
  • 举报
回复
呵呵,把afxwin.h引用进去,MFC里面的类都可以在控制台用啦
arong1234 2009-03-04
  • 打赏
  • 举报
回复
对于控制台这样的东西,你还是不要鼓捣这些复杂的东西了。在两个timer之间,你打算让你的CPU干吗?如果啥也不干,就Sleep好了
多任务系统中timer不可能精确的,Sleep不一定比timer差
shexinwei 2009-03-04
  • 打赏
  • 举报
回复
sleep()函数可以使你当前的线程停止运行,交出CPU
梅文海 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zy1691 的回复:]
简单的话就用sleep
GetTickCount也可以
如果要求误差控制在1ms以内就用QueryPerformanceCounter
[/Quote]

sleep 的误差比较大,不建议用这个做定时用,用 QueryPerformanceFrequency 配合 QueryPerformanceCounter可以做到很高的精度
xuruichen 2009-03-04
  • 打赏
  • 举报
回复
学习
加载更多回复(6)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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