Как запустить «событие», когда мой tcp-сервер Boost :: asio только начинает работать (AKA io_service.run ())?
Основываясь на отношениях клиент / сервер boost :: asio, я должен запускать клиентскую программу из серверной программы только тогда, когда поток сервера находится в "в ожидании подключения" государство.
Мой вопрос: как получить знания об этом состоянии?
В качестве образца используйтепример asio / сериализация ссылкаи замените основную функцию server.cpp следующим кодом:
#include <conio.h>
#include <concrt.h> // wait function
#include <future>
#include <thread>
void server_thread( std::promise<bool>& run )
{
boost::asio::io_service io_service;
s11n_example::server server(io_service, 123);
// too early to run.set_value( true );
io_service.run();
// too late to run.set_value( true );
}
int main(int argc, char* argv[])
{
std::promise<bool> run;
std::thread thrd( server_thread, boost::ref( run ) );
thrd.detach();
bool launched = run.get_future().get();
// server is waiting for connection
// launch the client
if( launched )
{
int rc = system( "start client.exe localhost 123" );
if( rc )
std::cerr << "system failed returning " << rc << std::endl ;
}
else
std::cerr << "server_thread failure" << std::endl ;
std::cout << "hit a key to exit" ;
while( !_kbhit() )
Concurrency::wait( 100 );
return 0;
}
Спасибо,