2013-01-15 107 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