2013-01-15 49 views
0

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

我试图创建引擎,但我没有做太多。我不知道我该怎么申请目前基于时间的事件破未决应用等动作,首先这里是我如何做它:

#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; 
    } 
    } 
} 

我试图让类似于睡眠功能()从WINDOWS.H,但能够在按下按键时打破延迟(我不知道是否正确的方式) - 在循环中它将启动“时间传递”,但我希望它独立于代码的其余部分,所以它将默默工作,并在代码的其余部分控制行动。我需要任何的以下的事情帮助:

- 使用键盘打破_sleep()函数不应该自动增加“传递秒”量

- 如何使计时器独立行动的代码发生的事情?我想创建一些可以在每秒钟循环(1)循环(可能是我修改的_sleep函数)的情况下创建一些东西,增加计数器并返回到破坏的代码部分(它会在应用程序中滥用scanf()但它现在不是问题)

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

+0

select()将是unix下的正确答案,仅适用于windows适用于套接字SleepEx()? – loreb

回答

0

不知道这是否是可用的答案,但是当我建立了一个rudimetary比赛我做到了多这样螺纹:

  1. 事件线程将推动一个消息到线程安全的消息队列 当用户做某事时。
  2. “游戏”线程读取消息队列,处理数据,将输出渲染到屏幕上,然后休眠一段时间。

以这种方式,事件线程可以保持阻塞,直到用户输入发生,而游戏逻辑和输入/输出以简单的同步方式完成。你可以使用Windows的线程库(尽管我还没有使用过那个,因为我总是在Linux上使用boost线程或posix线程。)

+0

感谢您的多线程建议 – Dydzio