Я новичок здесь, так что если у меня будут какие-либо ошибки, просто скажите мне.
Проблема в том, что у меня есть два процесса, и я хочу, чтобы они выполнялись одновременно, потому что они занимают слишком много времени. Поэтому я решил реализовать класс timer
, который управляет собственным boost::asio::io_service
и создать поток для этого io_service
. Код следующий:
timer.hpp
#include <iostream>
#include <string>
#include <functional>
#include <thread>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
class timer
{
public:
timer(std::function<void(void)> task,
int time)
: io__(),
timer__(io__, boost::posix_time::milliseconds(time)),
repetitive_task__(task),
time_wait__(time)
{
timer__.async_wait(boost::bind(&timer::loop, this));
}
void start()
{
thread__ = std::thread([this](){
io__.run();
});
thread__.join();
}
void loop()
{
repetitive_task__();
timer__.expires_at(timer__.expires_at() + boost::posix_time::milliseconds(time_wait__));
timer__.async_wait(boost::bind(&timer::loop, this));
}
void stop()
{
timer__.cancel();
io__.stop();
}
private:
boost::asio::io_service io__;
boost::asio::deadline_timer timer__;
std::function<void(void)> repetitive_task__;
int time_wait__;
std::thread thread__;
};
Для тестирования у меня есть самое простое из основных, что я мог подумать:
main.cpp
#include "timer.hpp"
void test1()
{
printf("action1 \n");
}
void test2()
{
printf("action 2 \n");
}
int main(int argc, char* argv[])
{
timer timer1(&test1, 100);
timer timer2(&test2, 50);
timer1.start();
timer2.start();
return 0;
}
И результат всегда action1 . Никогда action2 .
Я искал, как правильно реализовать таймеры, как в этом посте или в этом примере повышения , но я все еще не понимаю, что я делаю неправильно.
Заранее спасибо