Это:
io_service.run();
Является ли блокирующий вызов.Это правда, что вы можете иметь несколько вещей, происходящих асинхронно в одном потоке, используя ASIO, но вы не можете запустить ASIO в том же потоке, что и код, который не интегрирован с ASIO.Это классическая модель, управляемая событиями, где вся работа выполняется в ответ на некоторые уведомления о готовности (в вашем случае таймеры).
Попробуйте переместить ваш векторный / рандовый код в функцию и передать эту функциюio_service :: post (), который затем запустит этот код в контексте его метода run ().Затем, когда вы вызываете run (), произойдут обе вещи (хотя и не по-настоящему одновременно, поскольку для этого потребуются потоки).