2012-06-15 23 views
27

Quería saber cuál es la diferencia entre C++ 11 std::this_thread::yield() y std::this_thread::sleep_for()? ¿Y cómo decidir qué usar? Gracias.std :: this_thread :: yield() vs std :: this_thread :: sleep_for()?

+1

posible duplicado de [Rendir el intervalo de tiempo para el hilo actual en C++] (http://stackoverflow.com/questions/11048657/giving-up-the-time-slice-for-current-thread -in-c) – ypnos

+1

Parece que no se responde allí. – polapts

+1

'yield' no arroja. 'sleep_for' puede lanzar. – dirkgently

Respuesta

24

std::this_thread::yield cuenta la aplicación para volver a programar la ejecución de las discusiones, que se debe utilizar en un caso en el que se encuentra en un estado de espera ocupado, como en un grupo de subprocesos:

... 
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 se puede utilizar si Realmente quiero esperar por una cantidad específica de tiempo. Esto se puede usar para tareas, donde el tiempo realmente importa, por ejemplo, si realmente solo quieres esperar 2 segundos. (Tenga en cuenta que la aplicación podría esperar más tiempo que la duración de tiempo determinado)

+0

Entonces, ¿significa que std :: this_thread :: yield abandonará la ejecución durante "algún tiempo" y lo intentará de nuevo? ¿Cómo funciona el hilo cuando intenta la próxima vez? – polapts

+4

@polapts Sí, 'std :: this_thread :: yield' solo permite al planificador ejecutar otro hilo. Cuando el programador vuelve a este hilo, solo funcionará después de la llamada a 'std :: this_thread :: yield' – inf

10

std :: :: this_thread sleep_for()

hará que su sueño hilo durante un tiempo determinado (el hilo se detiene para un tiempo dado). (http://en.cppreference.com/w/cpp/thread/sleep_for)

std :: this_thread :: rendimiento()

detendrá la ejecución del subproceso actual y dar prioridad a otros procesos/hilos (si hay otros procesos/subprocesos en espera en la cola). La ejecución del hilo no se detiene. (simplemente libera la CPU). (http://en.cppreference.com/w/cpp/thread/yield)

Cuestiones relacionadas