VS控制台下计时器的问题

rentongdu 2011-12-05 10:29:19
我想编一个控制台下的程序,想为程序加一个计时器,可是计时器只有在鼠标动的时候才会更新时间
下面是我的代码:
while (true)
{
if (a[m-1][n-1]==0)
{
system("CLS");
printf("YOU WIN IT");
Sleep(5000);
ExitProcess(0);
}

SetConsoleMode(hStdin, fdwMode);
ReadConsoleInput(hStdin, &InBuf, 1, &cNumRead);
if (MouseClick(InBuf))
{
x=(InBuf.Event.MouseEvent.dwMousePosition.X-StartX)/2;
y=InBuf.Event.MouseEvent.dwMousePosition.Y-StartY;
if ((x>=0) && (x<=n-1)&&(y>=0)&&(y<=m-1)&&(a[y][x]>0))
{
flood(a,m,n,y,x);
gotoXY(0,0);
PrintBubble(a,m,n);
}
}
gotoXY(0,m);
PrintTime(StarTime);

}

我自己通过调试,确定问题应该在ReadConsoleInput(hStdin, &InBuf, 1, &cNumRead)这一句上,程序应该是在这里进入了一个循环,等待捕获鼠标事件,于是我尝试着加上判断,即修改成
if (!(ReadConsoleInput(hStdin, &InBuf, 1, &cNumRead)))
gotoXY(0,m);
PrintTime(StarTime);
后面跟上原来的内容,但是问题并没有解决
求高手帮忙看看
...全文
75 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rentongdu 2011-12-07
[Quote=引用 5 楼 zhao4zhong1 的回复:]

也可以另开一个线程,在那个线程里面
while (1) {
Sleep(1000);
显示计时
if (exitloop) break;
}
[/Quote]
等我回去研究一下什么是多线程
回复
赵4老师 2011-12-07
也可以另开一个线程,在那个线程里面
while (1) {
Sleep(1000);
显示计时
if (exitloop) break;
}
回复
rentongdu 2011-12-07
[Quote=引用 3 楼 keiy 的回复:]

我的是DOS(windows console模式)下的定时器,与鼠标操作无关的(无论鼠标不与不动,时间始终更新的)
用的是windows API的SetTimer,具体可参考下msdn
[/Quote]
好吧,谢谢你的回复
回复
柯本 2011-12-06
我的是DOS(windows console模式)下的定时器,与鼠标操作无关的(无论鼠标不与不动,时间始终更新的)
用的是windows API的SetTimer,具体可参考下msdn
回复
rentongdu 2011-12-06
[Quote=引用 1 楼 keiy 的回复:]

参考下以下代码:
C/C++ code

#include <windows.h>
#include <iostream>
using namespace std;

static BOOL bExitApp = FALSE;
const UINT uiTimerID = 10;

TIMERPROC FooTimerFun(……
[/Quote]
首先感谢回复
然后看不太懂代码,觉得这个对解决我的问题好像没有什么帮助,我的问题是如何能使程序在鼠标不动的情况下也能更新时间
回复
柯本 2011-12-05
参考下以下代码:

#include <windows.h>
#include <iostream>
using namespace std;

static BOOL bExitApp = FALSE;
const UINT uiTimerID = 10;

TIMERPROC FooTimerFun( HWND, UINT, UINT, DWORD )
{
static int nCount = 0;
cout << "Timer Function , nCount = " << nCount ++ << endl;
if( nCount > 20 )
bExitApp = TRUE;
return 0;
}

int main()
{
MSG msgFoo;
SetTimer( NULL, uiTimerID, 100 , (TIMERPROC)FooTimerFun );
while( !bExitApp && GetMessage( &msgFoo , NULL , 0 , 0 ) )
{
TranslateMessage( &msgFoo );
DispatchMessage( &msgFoo );
}
KillTimer( NULL , uiTimerID );
return 0;
}
回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2011-12-05 10:29
社区公告
暂无公告