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
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.
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
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.
Primeiro
boost::posix_time::seconds secTime(1);
boost::this_thread::sleep(secTime);
Em segundo lugar
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
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.