10

関数でスレッドを作成し、別の関数でこのスレッドを停止したい。私はこのように試しました:

class Server
{
private:
     boost::thread* mPtrThread;
...

public:
     void createNewThread()
     {
        boost::thread t(...);
        mPtrThread = &t;
     }


     void stopThread()
     {
        mPtrThread->interrupt();
     }
}

しかし、それはうまくいきません.どうすればスレッドを停止できますか?

4

2 に答える 2

22

interrupt() を使用する場合は、中断ポイントを定義する必要があります。中断ポイントの 1 つに到達するとすぐに、interrupt() を呼び出した後、スレッドは中断されます。

于 2012-05-10T10:27:55.583 に答える
18

まず、ローカルスコープで acreateNewThread()を宣言し、そのポインターをクラス メンバー に割り当てます。終了後、破棄され、mPtrThread は不正なポインターを保持します。boost::thread tmPtrThreadcreateNewThread()t

私はむしろ次のようなものを使いたいmPtrThread = new boost::thread(...)です;

また、Boost でのマルチスレッドの詳細については、この記事をお読みください。

于 2012-05-10T10:22:42.663 に答える