Я хотел знать, в чем разница между C++ 11 std::this_thread::yield()
и std::this_thread::sleep_for()
? И как решить, что использовать? Благодарю.std :: this_thread :: yield() vs std :: this_thread :: sleep_for()?
ответ
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 секунды. (Обратите внимание, что реализация может ждать дольше, чем заданная длительность времени)
Итак, означает ли это, что std :: this_thread :: yield откажется от выполнения в течение некоторого времени и повторит попытку? Как работает нить, когда o попытается в следующий раз? – polapts
@polapts Да, 'std :: this_thread :: yield' просто позволяет планировщику выполнять другой поток. Когда планировщик вернется к этому потоку, он будет работать только после вызова 'std :: this_thread :: yield' – inf
станд :: this_thread :: sleep_for()
сделает ваш сон нить в течение заданного времени (поток остановлен для заданное время). (http://en.cppreference.com/w/cpp/thread/sleep_for)
станд :: this_thread :: Выход()
остановит выполнение текущего потока и отдавать приоритет другого процесса/потоки (если есть и другие технологические потоки, ожидающие/в очереди). Выполнение потока не останавливается. (он просто освобождает процессор). (http://en.cppreference.com/w/cpp/thread/yield)
- 1. альтернатива std :: this_thread :: sleep_for()
- 2. Неблокирует чтение из std :: cin с помощью std :: this_thread :: sleep_for() или std :: this_thread :: yield() (IPC)
- 3. Windows 7: превышение C++ std :: this_thread :: sleep_for
- 4. станд :: this_thread :: sleep_for() и наносекунды
- 5. станд :: this_thread :: sleep_for() и GCC
- 6. std :: this_thread :: get_id() vs pass ID
- 7. Могу ли я использовать `std :: this_thread :: sleep_for()` с процессом MPI?
- 8. std :: this_thread :: sleep_for - это контекстный переключатель в эту тему?
- 9. error: 'std :: this_thread' не был объявлен
- 10. C++ станд :: this_thread :: sleep_for ошибка компилятора (лязг)
- 11. Почему пространство имен std :: this_thread?
- 12. std :: thread class vs std :: this_thread namespace в C++?
- 13. C++ 11 std :: this_thread - Как отменить sleep_until()?
- 14. Можно ли использовать std :: this_thread * функции из boost :: threads?
- 15. boost :: this_thread :: sleep_for спит намного дольше, чем я ожидаю.
- 16. станд :: this_thread :: sleep_for спит меньше, чем ожидалось в VS2015
- 17. boost :: this_thread :: sleep() vs. nanosleep()?
- 18. Использование std :: hash <std :: thread :: id>() (std :: this_thread :: get_id())
- 19. Должен ли я использовать std :: this_thread :: yield в занятом цикле, если имеет место латентность?
- 20. Печать std :: this_thread :: get_id() дает «thread :: id неисполняющего потока»?
- 21. повышения this_thread interruption_point не захватило
- 22. undefined ссылка на `boost :: this_thread:
- 23. Как передать std :: prom в тему? по std :: move или по std :: shared_ptr?
- 24. Ответный запроса никогда не вызывается, когда я ставлю станд :: this_thread :: sleep_for (1)
- 25. Почему sleep_for звонки FreeLibrary?
- 26. повышения :: this_thread :: disable_interruption использования путаница
- 27. Странный boost :: this_thread :: поведение сна
- 28. std :: condition_variable зачем нужен std :: mutex
- 29. Реализация пустого потока: condition_variables vs. yield()
- 30. std :: unique_ptr vs std :: shared_ptr vs std :: weak_ptr vs std :: auto_ptr vs raw указатели
Возможный дубликат [Отмена временного среза для текущей темы на C++] (http://stackoverflow.com/questions/11048657/giving-up-the-time-slice-for-current-thread -in-c) – ypnos
На него, похоже, нет ответа. – polapts
'yield' не выбрасывает. 'sleep_for' может выбросить. – dirkgently