C++中我要在线程中 线程定义在另外一个cpp文件中我要怎么让它用我现在这个CPP文件的函数呢我这个cpp文件已经引入了线程类的h文件了不能互相引用把我用的线程是QThread 用信号来发送参数给线程的但是信号不支持函数指针作为参数发送
如果你想让线程使用当前cpp文件中的函数,可以考虑将该函数定义为静态函数,然后在另一个cpp文件中通过类名来调用该函数。例如,在当前cpp文件中定义一个静态函数:
static void myFunction(int arg1, int arg2) {
// do something with arg1 and arg2
}
然后在另一个cpp文件中通过类名来调用该函数:
MyThread::run() {
myFunction(1, 2);
}
或者,你可以将该函数定义在一个单独的头文件中,然后在需要使用该函数的cpp文件中包含该头文件。
对于信号不能发送函数指针作为参数的问题,你可以考虑将函数指针转换为整型变量,然后将该整型变量作为参数发送。在接收信号时,再将整型变量转换为函数指针。例如:
// 定义一个函数指针类型
typedef void (*FunctionPointer)(int);
class MyThread : public QThread {
Q_OBJECT
signals:
void mySignal(int);
public slots:
void mySlot(int arg) {
// 将函数指针转换为整型变量
FunctionPointer funcPtr = &myFunction;
int funcPtrInt = reinterpret_cast<int>(funcPtr);
// 发送整型变量作为参数
emit mySignal(funcPtrInt);
}
};
// 接收信号并将整型变量转换为函数指针
MyObject::MyObject() {
connect(thread, &MyThread::mySignal, this, [&](int funcPtrInt) {
FunctionPointer funcPtr = reinterpret_cast<FunctionPointer>(funcPtrInt);
funcPtr(10);
});
}
``
原文地址: https://www.cveoy.top/t/topic/cjgj 著作权归作者所有。请勿转载和采集!