boost库异步操作编程中,异步的读入和写入在run函数调用前有回调函数,之后的则都没有回调函数,我猜测是因为run没有一直返回的原因,然后用了网上教的线程加上work,让他一直保持但却又把程序给堵住了,求解决怎么才能把run函数持续运行,下面是我的代码
try
{
cout<<"server start."<<endl;
//寻找客户端的链接
serv.start();
serv.write_data();
// server_ios.run();
}
catch (std::exception& e)
{
cout<<e.what()<<endl;
}
Thread01 th;
th.start();
server_ios.run();
Thread01::Thread01()
{
server_ios.run();
}
需要在某个线程上运行io_service::run()
才能保证异步IO操作正常执行。你的问题是在io_service::run()
方法被调用之后,还需要在后续代码中继续执行异步操作,但是这些异步操作并没有得到运行可以创建一个线程池来管理多个线程,用于并行地执行异步IO操作。这样可以确保在io_service::run()
方法被调用的同时,其他的异步IO操作也能得到执行。
先创建一个io_service
对象,并且创建一个work
对象,用于防止io_service
在没有任何任务等待的时候退出。然后创建了一个线程池,并且在每个线程中执行io_service::run()
方法。这样就能让异步IO操作在多个线程中并行执行。
在主线程中,可以执行其他操作,比如serv.start()
和serv.write_data()
等操作。这些操作并不会阻塞io_service
的执行。
最后,等待所有线程执行完毕,调用线程的join()
方法可以确保所有线程执行完毕之后才返回
在类的析构函数中调用join