如果你想让线程使用当前cpp文件中的函数可以考虑将该函数定义为静态函数然后在另一个cpp文件中通过类名来调用该函数。例如在当前cpp文件中定义一个静态函数:static void myFunctionint arg1 int arg2 do something with arg1 and arg2然后在另一个
这个错误是因为将函数指针转换为整型时,可能会丢失精度。为了解决这个问题,你可以使用uintptr_t类型来代替int类型,这是一个无符号整型类型,可以保证在不同平台上有相同的位数和表示形式。
#include <cstdint>
// 定义一个函数指针类型
typedef void (*FunctionPointer)(int);
class MyThread : public QThread {
Q_OBJECT
signals:
void mySignal(uintptr_t);
public slots:
void mySlot(int arg) {
// 将函数指针转换为整型变量
FunctionPointer funcPtr = &myFunction;
uintptr_t funcPtrInt = reinterpret_cast<uintptr_t>(funcPtr);
// 发送整型变量作为参数
emit mySignal(funcPtrInt);
}
};
// 接收信号并将整型变量转换为函数指针
MyObject::MyObject() {
connect(thread, &MyThread::mySignal, this, [&](uintptr_t funcPtrInt) {
FunctionPointer funcPtr = reinterpret_cast<FunctionPointer>(funcPtrInt);
funcPtr(10);
});
}
这样就可以避免精度丢失的问题了
原文地址: https://www.cveoy.top/t/topic/cjhR 著作权归作者所有。请勿转载和采集!