一个关于WINDOWS平台下控制台程序中的时钟使用问题,帮忙看看下面程序哪里出错了

blackeye527 2002-05-10 05:58:38
#include "stdafx.h"

VOID CALLBACK TimerProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
unsigned long dwTime // current system time
)
{
printf("Hello Timer!\n");
}

int main(int argc, char* argv[])
{
printf("Hello\n");
UINT id = ::SetTimer(NULL,0,100,TimerProc);
printf("settimer=%u\n",id);
//printf("Hello World!\n");
DWORD dwRet = GetLastError();

getchar();

::KillTimer(NULL,id);
return 0;
}
...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackeye527 2002-05-15
  • 打赏
  • 举报
回复
上面的问题现在有点进展,只要把getchar()改成
MessageBox(NULL,"Hello","Timer test",MB_OK);来阻塞主程序就好了。
好像是getchar()堵死了主进程,以至时钟回掉函数不能执行
blackeye527 2002-05-15
  • 打赏
  • 举报
回复
我要写一个用UDP实现可靠传输的类,需要超时重发,这就需要用到时钟。上面程序只是一个试验程序,我想看看时钟是怎么用的。
蚊子王 2002-05-14
  • 打赏
  • 举报
回复
用GetTickCount不就行了,上面的代码可以改写成以下的:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
unsigned int Tick=GetTickCount();
unsigned int Tick2;
printf("Hello\n");
while(!kbhit()){
Tick2=GetTickCount();
if(Tick2-Tick>=100){
printf("Hello World!\n");
Tick=Tick2;
}
}
return 0;
}
ma2jun 2002-05-13
  • 打赏
  • 举报
回复
WestCowboy(西部牛仔),中断如何做,讲讲好吗?
WestCowboy 2002-05-11
  • 打赏
  • 举报
回复
控制台程序中,能定义这样的回调函数吗?
况且, 为什么要这样啊,干吗不用中断之类的。
ma2jun 2002-05-11
  • 打赏
  • 举报
回复
有意思
LionEagle 2002-05-11
  • 打赏
  • 举报
回复
在main里面自己写一个消息循环试试
blackeye527 2002-05-10
  • 打赏
  • 举报
回复
不过SetTimer()可以用回调函数的,不一定要往窗口发消息的。
不过,控制台程序中要用时钟总要有个解决方法吧,一个操作系统不可能不提供时钟吧。
蚊子王 2002-05-10
  • 打赏
  • 举报
回复
控制台程序好象没有消息循环这个概念的,这么处理消息啊

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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