Ich habe ein Problem bei der Verwendung von deadline_timer und io_service :: Beitrag wie folgt:Verwendung io_service :: Post (Boost), wenn deadline_timer wartet
#include "boost/asio.hpp"
#include "boost/thread.hpp"
int main()
{
boost::asio::io_service io_service;
boost::asio::deadline_timer timer1(io_service);
boost::asio::deadline_timer timer2(io_service);
timer1.expires_from_now(boost::posix_time::seconds(1));
timer1.async_wait([](const boost::system::error_code& error) {
boost::this_thread::sleep(boost::posix_time::seconds(5));
printf("1 ");
});
timer2.expires_from_now(boost::posix_time::seconds(2));
timer2.async_wait([](const boost::system::error_code& error) {
printf("2 ");
});
boost::thread t([&io_service]() {
boost::this_thread::sleep(boost::posix_time::seconds(5));
io_service.post([]() {
printf("3 ");
});
io_service.post([]() {
printf("4 ");
});
});
io_service.run();
t.join();
getchar();
return 0;
}
ich thougth, dass das Ergebnis "1 2 3 4" ist aber Das Ergebnis ist "1 3 4 2". Jeder kann mir zeigen, wie der Rückruf von Timer2 (Druck "2") zuvor als Ergebnis "1 2 3 4" mit Boost-Bibliothek durchgeführt wird (und die Ablaufzeit von Timer1 und Timer2 nicht ändern).
Vielen Dank!
** ⚠ ** Ohne die Aufrufketten Nacharbeiten oder die Timer ändern, eine äußerst fragile Lösung, die stark auf Details der Implementierung abhängt ist verfügbar [hier] (http://coliru.stacked-crooked.com/a/0524433bb0bdcf71) ** ⚠ ** –