C 控制台基于时间的引擎

C 控制台基于时间的引擎,c,windows,function,console-application,C,Windows,Function,Console Application,我想为我的控制台应用程序创建一个“引擎”,它将计算经过的时间,并在经过一定时间后强制应用程序执行基于时间的事件。我考虑创建一个简单的基于文本的策略游戏,用于教育目的(不是为了家庭作业,只是为了我自己) 我试图创造引擎,但我没有走得太远。我不知道如何在应用程序等中应用基于时间的事件中断当前挂起的操作,首先是我如何做到的: #include <stdio.h> #include <conio.h> #include <Windows.h> void _sleep(

我想为我的控制台应用程序创建一个“引擎”,它将计算经过的时间,并在经过一定时间后强制应用程序执行基于时间的事件。我考虑创建一个简单的基于文本的策略游戏,用于教育目的(不是为了家庭作业,只是为了我自己)

我试图创造引擎,但我没有走得太远。我不知道如何在应用程序等中应用基于时间的事件中断当前挂起的操作,首先是我如何做到的:

#include <stdio.h>
#include <conio.h>
#include <Windows.h>
void _sleep(int t);
int main()
{
int seconds_passed = 0; //counts how much time passed since application started
while(1)
{
    //if(seconds_passed == 100) ... time based action
_sleep(1000);
printf("test");
seconds_passed += 1;
}

return 0;
}


void _sleep(int t) 
{ 
    int i;
    for (i = 0; i < (t/100); i++) 
    { 
        Sleep(100); 
    if (kbhit()!= 0)
        {
            getch();
            break; 
    }
    }
}
#包括
#包括
#包括
虚无睡眠(int t);
int main()
{
int seconds_passed=0;//计算自应用程序启动以来经过的时间
而(1)
{
//如果(通过的秒数==100)…基于时间的操作
_睡眠(1000);
printf(“测试”);
通过的秒数+=1;
}
返回0;
}
无效睡眠(int t)
{ 
int i;
对于(i=0;i<(t/100);i++)
{ 
睡眠(100);
如果(kbhit()!=0)
{
getch();
打破
}
}
}
我试图使函数类似于windows.h中的Sleep(),但它能够在按下键时中断延迟(我不知道我的方式是否正确)-在循环中,它将开始“时间流逝”,但我希望它独立于代码的其余部分,因此它将以静默方式工作,并控制代码其余部分的操作。我需要以下任何方面的帮助:

-使用键盘中断_sleep()函数不应自动增加“已通过的秒数”

-如何使计时器独立于代码中发生的操作?我想创建一些可以每秒中断整个while(1)循环的东西(可能是我修改过的_sleep函数),增加计数器并返回到中断的代码部分(它会在应用程序中滥用scanf()操作,但现在还不是问题)


-我听说select()函数在这里可能很有用,任何人都有使用它的经验,可以告诉我更多吗?

不知道这是否是一个有用的答案,但当我构建一个简单的游戏时,我用这种方式使它成为多线程的:

  • 事件线程将消息推送到线程安全消息上 当用户做某事时排队
  • “游戏”线程读取消息队列,处理数据,将输出呈现到 打开屏幕,然后睡眠一段时间
  • 通过这种方式,事件线程可以保持阻塞状态,直到用户输入发生,而游戏逻辑和输入/输出以简单的同步方式完成。 Windows有一个可以使用的线程库(虽然我还没有使用这个库,因为我在linux上总是使用boost线程或posix线程。)

    select()在unix下是正确的答案,在Windows上它只适用于sockets.SleepEx()?