该错误的原因是 std::thread::_Invoke 函数调用了 std::invoke 函数,但是 std::invoke 函数没有匹配到对应的重载函数。这可能是由于函数模板参数类型不正确导致的。

要解决这个问题,需要确保函数模板参数类型正确。在上述代码中,函数模板参数类型可能存在问题,例如:

void video_IR_frame_acquisition(promise<Mat>& promiseObj) {
    // ...
}

void video_VIS_frame_acquisition(promise<Mat>& promiseObj) {
    // ...
}

这里的 promise<Mat>& 类型可能需要改为 promise<Mat*>&, 因为 std::promise 类的构造函数需要传递指针类型。

同时,需要确保使用 std::ref 函数将 promise 对象引用传递给线程函数,以确保线程函数能够访问到正确的 promise 对象。

修改后的代码如下:

void video_IR_frame_acquisition(promise<Mat*>& promiseObj) {
    // ...
}

void video_VIS_frame_acquisition(promise<Mat*>& promiseObj) {
    // ...
}

int main() {
    promise<Mat*> IR_promiseObj;
    promise<Mat*> VIS_promiseObj;

    thread IR_thread(video_IR_frame_acquisition, std::ref(IR_promiseObj));
    thread VIS_thread(video_VIS_frame_acquisition, std::ref(VIS_promiseObj));

    Mat* IRDIF_frame_ptr;
    Mat* VISDIF_frame_ptr;

    while (true) {
        // 获取 IRDIF_frame
        IRDIF_frame_ptr = IR_promiseObj.get_future().get();
        // 获取 VISDIF_frame
        VISDIF_frame_ptr = VIS_promiseObj.get_future().get();
        // ...
    }

    IR_thread.join();
    VIS_thread.join();

    return 0;
}
C++ 多线程错误: std::invoke 函数未找到匹配的重载函数

原文地址: https://www.cveoy.top/t/topic/odCC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录