C++ 多线程错误: std::invoke 函数未找到匹配的重载函数
该错误的原因是 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;
}
原文地址: https://www.cveoy.top/t/topic/odCC 著作权归作者所有。请勿转载和采集!