Como dormir um tópico de impulso em C++

parece impossível dormir um tópico usando o boost::thread. O sono do método requer um system_time, mas como posso construí-lo?

Olhar para dentro das bibliotecas não ajuda muito...

Basicamente, tenho um fio. dentro da função que passo para este tópico como ponto de entrada, gostaria de chamar algo como

 boost::this_thread::sleep
Ou assim, como fazer isto?

Obrigado

Author: erip, 2010-11-24

4 answers

Dependendo da sua versão de impulso:

Qualquer um...

#include <boost/chrono.hpp>
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep_for(boost::chrono::milliseconds(100));

Ou...

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread/thread.hpp> 

boost::this_thread::sleep(boost::posix_time::milliseconds(100));
Também podes usar microssegundos, segundos, minutos, Horas e talvez outros, Não tenho a certeza.
 85
Author: Benjamin Lindley, 2017-09-07 09:04:02

De outro post, eu aprendi boost::this_thread::sleep está desactualizado para impulsionar v1.5.3: http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html

Em vez disso, tenta
void sleep_for(const chrono::duration<Rep, Period>& rel_time);

Por exemplo

boost::this_thread::sleep_for(boost::chrono::seconds(60));

Ou talvez tentar {[[11]}

void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);

Eu estava a usar o Boost v1. 53 com a função sleep desactualizada, e ele interrompeu periodicamente o programa. Quando mudei as chamadas para a função sleep para as chamadas para a função sleep_for, o programa parou de falhar.

 20
Author: user3731622, 2015-03-27 20:14:59

Primeiro

boost::posix_time::seconds secTime(1);  
boost::this_thread::sleep(secTime); 

Em segundo lugar

boost::this_thread::sleep(boost::posix_time::milliseconds(100));
 4
Author: user2749562, 2013-09-05 07:11:15
Aprendi da pior maneira que pelo menos no MS Visual Studio (experimentado em 2013 e 2015) há uma enorme diferença entre
boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval));

E

boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval));
or
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval));

Quando o intervalo é menor do que um limiar bastante substancial (vi o limiar de 15000 microssegundos = 15 milissegundos).

Se o SmallIterval for pequeno, o sono() provoca uma interrupção instantânea. o sono (100 mks) comporta-se como o sono(0 mks).

But sleep_for() for the time interval smaller than a threshold pauses for the o limiar inteiro. sleep_ for(100 mks) comporta-se como sleep_ for (15000 mks).

O Comportamento para intervalos maiores que o limiar e para o valor 0 é o mesmo.

 0
Author: Lenny, 2016-05-17 15:50:19