2017-05-09 12 views
0

私は実装したゲームのためのスレッドを形成する最良の方法についてちょっと混乱します。ゲームはとてもシンプルです。あなたの宇宙船を操り、入ってくる壁をかわす必要があります。RTOSとスレッドを使用する

現時点では、私のコードは宇宙船が爆破するまでループします。 (ゲームオーバーであればnotBlownUp()はfalseを返します)このwhileループによって表される:アップデートには依存宇宙船

while(notBlownUp()) { 
    osSignalSet(tid_taskDisplay, 1U); 
} 

は、これはtaskDisplay()

void taskDisplay(void const *argument){ 

    for (;;) { 
     osSignalWait(1U, osWaitForever); 
     drawEverything(); 
     osSignalSet(tid_taskWall, 1U); 
     osSignalSet(tid_taskSpaceship, 1U); 
    } 
} 

void taskDisplay(void const *argument); 
osThreadId tid_taskDisplay; 
osThreadDef(taskDisplay, osPriorityAboveNormal, __FI, 0); 

するための信号を設定し、すべてのtaskWallとは何ですユーザ入力:

void taskSpaceship(void const *argument){ 

    for (;;) { 
     osSignalWait(1U, osWaitForever); 
     updateSpaceship(); 
    } 
} 
osThreadId tid_taskSpaceship; 
osThreadDef(taskSpaceship, osPriorityAboveNormal, __FI, 0); 
taskWall

はと全く同じです357壁を更新するだけです。

私の質問は、何度も何度もやっているときにスレッドを持っている点です。あるいは、私はこれを完全に間違っているのですか?

コードは、基本的にこの順序で実行されている:

taskDisplay - > taskWall - > taskSpaceship - > taskDisplay - > taskWall - > taskSpaceship

私には、それのシーケンシャルネスは、私を作ります間違ったスレッドを使っていると思います! - 経過時間に基づいて駒を動かす>ゲーム物理学のアップデート

キーボードイベント - >プロセスユーザー入力

その方法

クロック・チックのイベント:

+0

プログラムが純粋に連続している場合は、実際にはスレッドを使用する必要はありません。つまり、スレッディングはまだ素晴らしい抽象化を提供し、正しく使用するとコードの一部を単純化するのに役立ちます。誤って使用すると、作業がはるかに複雑になる可能性があります。 "なぜスレッドを使うのか"を素早く検索すると、[this](http://stackoverflow.com/questions/2857184/when-should-i-use-threads)などの興味深い結果が得られました。編集:[this](https://www.cs.mtu.edu/~shene/NSF-3/e-Book/FUNDAMENTALS/threads.html)大学レベルのcsクラスのWebページ。 – mgarey

+0

ええ、それは私が考えていることを参照してください。しかし、実際にはプログラムは完全にシーケンシャルなので、プログラムを作成して、できる限りスレッドに移行したいと思っていました。 @ mgareyそして私は必ずしも必要ではないことを知っていますが、学習目的のために私はしたいと思います。私は、 'taskSpaceship'と' taskWall'は何とか非同期的に実行できると信じています。 – user3667111

+0

あなたのコードでは、 'taskWall'と' taskSpaceship'は並行して実行されませんか? – agbinfo

答えて

0

通常は、イベント駆動型コード、のような何かをしたいですイベント駆動スレッドは任意の順序で実行できます。

+0

で簡単に置き換えることができます。 – user3667111

+0

各スレッドにあるリファクタリングを意味する場合があります。また、初期化ルーチンは、非同期クロックとキーボードイベントを設定する必要があります。 – stark

+0

キーボードイベントがありません。これはマイクロコントローラ用です – user3667111

関連する問題