58

std::this_thread::yield()C ++ 11との違いは何std::this_thread::sleep_for()ですか?いつ使用するかを決める方法は?

4

2 に答える 2

40

std::this_thread::yieldスレッドの実行を再スケジュールするように実装に指示します。これは、スレッドプールのように、ビジー待機状態にある場合に使用する必要があります。

...
while(true) {
  if(pool.try_get_work()) {
    // do work
  }
  else {
    std::this_thread::yield(); // other threads can push work to the queue now
  }
}

std::this_thread::sleep_for本当に特定の時間を待ちたい場合に使用できます。これは、タイミングが本当に重要なタスクに使用できます。たとえば、本当に2秒だけ待機したい場合です。(実装は指定された期間より長く待機する場合があることに注意してください)

于 2012-06-15T10:47:02.223 に答える
23

std :: this_thread :: sleep_for()

スレッドを一定時間スリープさせます(スレッドは一定時間停止します)。(http://en.cppreference.com/w/cpp/thread/sleep_for

std :: this_thread :: yield()

現在のスレッドの実行を停止し、他のプロセス/スレッドを優先します(キューで待機している他のプロセス/スレッドがある場合)。スレッドの実行は停止されません。(CPUを解放するだけです)。(http://en.cppreference.com/w/cpp/thread/yield

于 2012-06-15T10:49:27.797 に答える