スレッド内の関数へのパラメータの入力に関する注意事項

2475 ワード

1.関数のパラメータタイプがstringであり、入力されたパラメータタイプがchar[]である場合、空のサスペンションポインタを回避するためにスレッド関数で変換する必要があります.次のようになります.
void f(int, std::string const&);



void oops(int some_parm)

{

    char buffer[100];

    sprintf(buffer, "%i", some_parm);

    //std::thread(f, 3, buffer)      //not do this

    std::thread(f, 3, string(buffer)) //instead of    

}

2.スレッド関数のパラメータが参照の場合、パラメータを直接入力するのではなく、参照に明確に変換する必要があります.たとえば、次のようにします.
void find_by_idx(int&);



void opps_again()

{

    int idx = 6;

    //std::thread t(find_by_idx, idx);        //damn no

    std::thread t(find_by_idx, std::ref(idx)); //damn good

}

3.メンバー関数はスレッド関数としても使用できます.
class X

{

public:

    void do_something(Type parm);

};



X my_x;

std:thread(&X::do_something, my_x; the_parm);