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

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

void video_IR_frame_acquisition(promise& promiseObj) { // ... }

void video_VIS_frame_acquisition(promise& promiseObj) { // ... }

这里的promise&类型可能需要改为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;
1DProgram FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC143532215includethread5514 error C2672 invoke 未找到匹配的重载函数1DProgram FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC143532215includetype

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

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