Semble impossible de dormir un thread en utilisant boost :: thread. La mise en veille de la méthode nécessite une heure système mais comment puis-je la construire?
Regarder à l'intérieur des bibliothèques n'aide pas vraiment beaucoup ...
Fondamentalement, j'ai un thread à l'intérieur de la fonction que je passe à ce thread comme point d'entrée, je voudrais appeler quelque chose comme
boost::this_thread::sleep
ou quelque chose comme ça?
Je vous remercie
Selon votre version de Boost:
Soit...
#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));
Vous pouvez également utiliser des microsecondes, des secondes, des minutes, des heures et peut-être quelques autres, je ne suis pas sûr.
D'un autre poste, j'ai appris boost::this_thread::sleep
est déconseillé pour Boost v1.5.3: http://www.boost.org/doc/libs/1_53_0/doc/html/thread/thread_management.html
Essayez plutôt
void sleep_for(const chrono::duration<Rep, Period>& rel_time);
par exemple.
boost::this_thread::sleep_for(boost::chrono::seconds(60));
Ou peut-être essayer
void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
J'utilisais Boost v1.53 avec la fonction sleep
obsolète, et le programme s'est écrasé de façon apériodique. Lorsque j'ai changé les appels à la fonction sleep
en appels à la sleep_for
, le programme a cessé de planter.
d'abord
boost::posix_time::seconds secTime(1);
boost::this_thread::sleep(secTime);
deuxièmement
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
J'ai appris à la dure qu'au moins dans MS Visual Studio (essayé en 2013 et 2015), il y a une énorme différence entre
boost::this_thread::sleep(boost::posix_time::microseconds(SmallIterval));
et
boost::this_thread::sleep_for(boost::chrono::microseconds(SmallIterval));
or
std::this_thread::sleep_for(std::chrono::microseconds(SmallIterval));
lorsque l'intervalle est inférieur à un seuil assez important (j'ai vu un seuil de 15 000 microsecondes = 15 millisecondes).
Si SmallIterval est petit, sleep () fait une interruption instantanée. le sommeil (100 mks) se comporte comme le sommeil (0 mks).
Mais sleep_for () pour l'intervalle de temps inférieur à un seuil marque une pause pour tout le seuil. sleep_for (100 mks) se comporte comme sleep_for (15000 mks).
Le comportement pour les intervalles supérieurs au seuil et pour la valeur 0 est le même.