1

C++ では、渡された float パラメーターの量によってプログラムの実行を停止する関数を記述していました。次の関数があります。

void wait(float sec){
  clock_t endwait = clock() + sec * CLOCKS_PER_SEC; // CLOCK_PER_SEC == 1000
  while(clock() < endwait);
}

そのようなC#に同等の組み込みメソッドはありますか?そうでない場合、どうすればそのようなものをC#で書くことができますか?

事前にt​​hnx.. :)

4

3 に答える 3

5

使ってくださいSystem.Threading.Thread.Sleep(int millisecondsTimeout);

于 2012-07-04T20:29:36.530 に答える
3

Thread.Sleep(CLOCKS_PER_SEC);

と同等の方法です

void wait(float sec)

しかし、それはプログラムの実行を停止しているわけではありません。プログラムが実行されているスレッドを一時停止しているだけです。これらの方法には少し違いがあると思います。void wait(float sec)ビジーウェイトメソッドです。プロセッサは、アクティブなプロセスキューからスレッドまたはプロセスを取得し、計算を行います。ただし、メソッドThread.Sleep(CLOCKS_PER_SEC)スレッドがサスペンドキューに移動する場合、CLOCKS_PER_SEC時間が終了しない限り、プロセッサはスレッドを実行しません。

于 2012-07-04T20:43:48.273 に答える
2
Thread.Sleep(CLOCKS_PER_SEC);

また

Thread.SpinWait(NUMBER_OF_CYCLES);

- 編集 -

申し訳ありません。上記の説明を書いているときに停電がありました...それは、最初になるために半分の答えを投稿することを教えてくれます。コメンテーターが物事をチェックしてくれてありがとう。:)。

とにかく...Thread.Sleep現在のスレッドを一定期間一時停止し、Thread.SpinWaitスレッドをタイトループに陥らせます(MSDNから)。

Thread.Sleep比較する興味深い方法Thread.SpinWaitは、タスク マネージャーなどでプロセッサのアクティビティを監視することです。次の実行中にタスク マネージャーを表示すると、

Thread.SpinWait(int.MaxValue);

そのコード行の実行中に、プロセスがコアの 1 つを使い果たしていることがわかります。ただし、次の行を実行すると、

Thread.Sleep(int.MaxValue);

プロセスが処理サイクルをまったく使用していないことがわかります。

于 2012-07-04T20:26:49.103 に答える