2

tcp::socketstd::thread からアクセスすると、プログラムが終了することがわかりました。これがboostのサンプルプログラムです。 http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/example/echo/blocking_tcp_echo_server.cpp コンパイルします:g++ blocking_tcp_echo_server.cpp -std=c++11 -lboost_system -lboost_thread -pthread

これまでのところ、すべてが正常に機能しています。ただし、boost::thread を std::thread (および #include ) に置き換えると、sock メンバー ( ) にアクセスしたときにプログラムがクラッシュ (終了) しますsocket::read_some()

エラー メッセージ: アクティブな例外なしで呼び出された終了。

何か案が?

4

1 に答える 1

1

boost::threadそれがとの違いstd::threadです。私はコードを見てきました。次のように、で動作するように修正できますstd::thread

void server(boost::asio::io_service& io_service, short port) {
    // ...
    std::thread t(boost::bind(session, sock));
    t.detach();
}

を使用するときは、スレッドを切り離すか結合する必要があるようですstd::thread

コード:

#include <iostream>
#include <thread>

int main(void) {
    std::thread t([](){std::cout << "will throw exception" << std::endl;});
//  t.detach();
    return 0;
}

pthreadをデタッチしない、結合しない、またはリンクしない場合、例外がスローされます。

于 2013-08-02T04:41:27.373 に答える