C++ 同時マルチスレッド処理 -- 一時オブジェクトの使用

1-- 一時オブジェクトをスレッドパラメータとして渡します

detach() を使用してスレッドを分離する場合、パラメータを渡すときに次の問題に注意する必要があります。

(1) int などの単純な型パラメータを渡す場合、パラメータの再利用の問題を避けるために、参照転送ではなく値転送を使用することを        お勧めします(メインスレッドが最初に終了し、参照によって渡されたパラメータが再利用され、無効なパラメータが発生します)サブスレッドの場合);

        (2) 複合型パラメータ(クラスなど)を渡す場合、暗黙的な型変換は避けるべきです(暗黙的な型変換が発生すると、メインスレッドが終了し、渡されるパラメータがまだ暗黙的な変換を受けていない可能性があります)型変換、現時点では、一時オブジェクト ( std::string(s)

class(value) は、最初にメインスレッドで一時オブジェクトを生成し、次にパラメータを渡すためにパラメータを渡し、同時に参照 ( myprint 関数の const myclass &cls など) を使用して関数パラメータを受け取ります。

        

必要がない場合は、スレッドを分離するために detach() を使用しないようにしてください。

#include <iostream>
#include <thread>
#include <string>

class myclass{
public:
    int value;
    myclass(int v):value(v){std::cout << "value: " << value << std::endl;};
};

void myprint(const int i, const std::string &str, const myclass &cls){
    std::cout << "i: " << i << std::endl;
    std::cout << "str: " << str << std::endl;
}   

int main(){
    int idx = 10;
    std::string s = "ABC";
    int value = 5;
    std::thread thread1(myprint, idx, std::string(s), myclass(value));
    thread1.detach();

    return 0;
}

2--

おすすめ

転載: blog.csdn.net/weixin_43863869/article/details/131746136