0

別のスレッドで「実行」を実行する必要があります

class TcpClient
{
public:
    TcpClient();
    virtual ~TcpClient();

    void Run();
}

ブーストを使用して実行します:

    MessageBox(0, "1", APP_NAME, NULL);
    TcpClient client;
    boost::thread thread( boost::bind( &TcpClient::Run, &client) );
    thread.join();
    MessageBox(0, "2", APP_NAME, NULL);

実行方法:

void TcpClient::Run()
{
    boost::this_thread::sleep( boost::posix_time::milliseconds(10000) ); //Sleep 10 sec
}

Messageboks2 は最初のメッセージの直後に呼び出す必要がありますが、10 秒待たなければなりません。間違いがありそうなところは?

4

1 に答える 1

2

joinこれは、スレッドを作成した直後にスレッドを呼び出すためです。スレッドが完了するまでブロックします。

呼び出さないかjoin(変数がスコープ外になったときにデストラクタによって実行されます) 、スレッドを切り離します。


Pete Beckerが指摘したように、デストラクタはスレッドに参加せterminate、代わりに呼び出してプロセス全体を終了させます。joinが Boost スレッドで確実に呼び出されるようにするには、thread_joinerクラスを使用します。

于 2013-06-16T09:46:10.853 に答える