2016-09-01 11 views
1

私はクラス内で新しいスレッドを作成して使用する必要があります。 Somethinkのような:クラス内でスレッドを作成し、クラスC++で使用してください

class Somethink 
{ 
    public: 
    func_to_be_thread(); 
    init_func(); 
} 

Somethink::init_func() 
{ 
    std::thread newThread(func_to_be_thread); 
} 

int main() 
{ 
    Somethink ss; 
    ss.init_func(); 
} 

EDIT:それを正しく作る方法 ? Everythink私は返すエラーをidkクラス(メソッドを実行する)クラスメソッドでクラスで新しいスレッドを作成するためにエラーを返しました。私の質問は、それを正しく行う方法です。

+0

あなたが質問をすることはありません。 – Ryan

答えて

2

をチェックすることができますが、構文でより多くの助けが必要な場合にのみ.. C++ 11を起動するのstd ::スレッドを使用することができます。

class Something 
{ 
    public: 
    void func_to_be_thread(); 
    void func_to_be_thread_advanced(const char* arg1); 

    std::thread init_func(); 
    std::thread init_func_with_param(const char *arg1); 
} 

std::thread Something::init_func() 
{ 
    return std::thread(&Something::func_to_be_thread, this); 
} 

また、あなたは、ラムダとパラメータでそれを行うことができます。

std::thread init_func_with_param(const char *arg1) 
{ 
    return std::thread([=] { func_to_be_thread_advanced(arg1); }); 
} 
+0

Thxが動作しています!どうすれば無限にすることができますか?私は非同期サーバーからのパケットを受信する必要があります。もし私がそれを実行すると、アクティブな例外なしで呼び出された終了と言います。もし私がそれに参加したりデタッチすれば、プログラムはクラッシュします。 –

+0

@ lika85456あなたが正しいと分かっているなら、 'func_to_be_thread'の中で無限ループを使うことができます。しかし、他の質問を作成し、問題のあるコードをそこに置く方が良いようです。新しい問題をよりよく分析し、より良い助言を与えるチャンスを与えます。 – Nikita

+0

私は2日待つ必要があるので、別の質問を作成できません。そして、私はそのマークをチェック:) –

関連する問題