スレッド内の関数へのパラメータの入力に関する注意事項
2475 ワード
1.関数のパラメータタイプがstringであり、入力されたパラメータタイプがchar[]である場合、空のサスペンションポインタを回避するためにスレッド関数で変換する必要があります.次のようになります.
2.スレッド関数のパラメータが参照の場合、パラメータを直接入力するのではなく、参照に明確に変換する必要があります.たとえば、次のようにします.
3.メンバー関数はスレッド関数としても使用できます.
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);