Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在jthread中传递带有参数和stop_条件的函数?_C++_Multithreading_C++20 - Fatal编程技术网

C++ 如何在jthread中传递带有参数和stop_条件的函数?

C++ 如何在jthread中传递带有参数和stop_条件的函数?,c++,multithreading,c++20,C++,Multithreading,C++20,我正试着做这样的事情 #include <iostream> #include <thread> #include <chrono> void doWork(char a, std::stop_token st = {}) { while (!st.stop_requested()) { std::cout << a << '\n'; } } int main() { std::jthread

我正试着做这样的事情

#include <iostream>
#include <thread>
#include <chrono>

void doWork(char a, std::stop_token st = {}) {
    while (!st.stop_requested()) {
        std::cout << a << '\n';
    }
}

int main() {
    std::jthread t1{doWork, 'A'}, // error
                 t2{doWork, 'B'}; // error
    std::this_thread::sleep_for(std::chrono::milliseconds(50));
}
甚至有可能这样做吗

我认为这应该是可能的,因为我看到了一个与lambda()类似的示例:


您的实现几乎是正确的。最重要的是它接受一个
std::stop_标记作为第一个参数。因此,在
doWork
的声明中切换顺序将对其进行排序

void doWork(std::stop_token st, char a) {
    while (!st.stop_requested()) {
        std::cout << a << '\n';
    }
}
void doWork(std::stop\u token st,char a){
而(!st.stop_requested()){
标准::cout
//...
std::jthread t([&ready, &readyMutex, &readyCV] (std::stop_token st) {
    while (!stoken.stop_requested()) {
        //...
    }
});
void doWork(std::stop_token st, char a) {
    while (!st.stop_requested()) {
        std::cout << a << '\n';
    }
}