経過時間をカウントし、一定の時間が経過したときにアプリケーションに時間ベースのイベントを強制的に実行させるコンソールアプリケーション用の「エンジン」を作成したいと思います。教育目的で (宿題ではなく、私のためだけに) シンプルなテキストベースの戦略ゲームを作成することを考えています。
エンジンを作成しようとしましたが、あまりうまくいきませんでした。アプリケーションなどで現在保留中のアクションを中断する時間ベースのイベントを適用する方法がわかりません。まず、これを作成した方法を次に示します。
#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()に似た関数を作ろうとしましたが、キーが押されたときに遅延を打破する機能を備えていました(私が正しい方法で進んでいるかどうかはわかりません) - ループでは「時間経過」を開始します。しかし、コードの残りの部分から独立させたいので、静かに動作し、コードの残りの部分のアクションを制御します。次のいずれかについて助けが必要です。
-キーボードを使用して_sleep()関数を中断しても、「経過秒数」が自動的に増加しないはずです
-コードで起こっているアクションからタイマーを独立させる方法は? while(1) ループ全体を毎秒中断できるものを作成することを考えました (おそらく、変更された _sleep 関数である可能性があります)。カウンターを増やして、中断したコード部分に戻ります (アプリケーションで scanf() アクションを悪用します)。でも今のところ問題なし)
- select() 関数について聞いたことがありますが、ここで役立つ可能性があります。誰か経験があり、詳細を教えてもらえますか?