在 C++ 多线程编程中,经常需要在一个线程中调用另一个 cpp 文件中的函数。本文将介绍几种解决方案,并解决信号发送函数指针作为参数的问题。

1. 使用静态函数

如果你想让线程使用当前 cpp 文件中的函数,可以考虑将该函数定义为静态函数,然后在另一个 cpp 文件中通过类名来调用该函数。

例如,在当前 cpp 文件中定义一个静态函数:

static void myFunction(int arg1, int arg2) {
    // do something with arg1 and arg2
}

然后在另一个 cpp 文件中通过类名来调用该函数:

MyThread::run() {
    myFunction(1, 2);
}

2. 包含头文件

你也可以将该函数定义在一个单独的头文件中,然后在需要使用该函数的 cpp 文件中包含该头文件。

3. 将函数指针转换为整型变量

对于信号不能发送函数指针作为参数的问题,你可以考虑将函数指针转换为整型变量,然后将该整型变量作为参数发送。在接收信号时,再将整型变量转换为函数指针。

例如:

// 定义一个函数指针类型
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);
    });
}

通过以上三种方法,你就可以在 C++ 多线程编程中实现跨文件调用函数,并解决信号发送函数指针作为参数的问题。

C++ 多线程中跨文件调用函数的解决方案 - 使用静态函数、头文件或信号发送整型变量

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

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