c++ - 我如何从 C++ 中的静态线程入口点函数调用其他函数?

标签 c++ qt pthreads

我的代码中有一个线程和一个入口点函数,如下所示:

    static void *readerThreadEntryPoint(void *arg)

    void *MainWindow::readerThreadEntryPoint(void *arg) {
    MODES_NOTUSED(arg);     
}

我想用这段代码调用一个函数

    QBytearray data = socket->ReadAll();

我该怎么办? 我有一个错误:在静态成员函数 QTcpSocket *socket 中无效使用成员“MainWindow::socket”; 我有 2 个线程,一个用于读取缓冲区,另一个用于处理数据!

最佳答案

在线程创建期间,您应该将指向类实例的指针作为 arg 传递。这样,您可以在静态方法中执行此操作,而不是将 arg 标记为“未使用”:

void *MainWindow::readerThreadEntryPoint(void *arg) {
    MainWindow* self = static_cast<MainWindow*>(arg);

从那时起,您可以使用 self,类似于您在非静态方法中使用的隐式 this。或者您可以简单地调用另一个非静态但执行实际工作的方法,如下所示:

self->readerThreadEntryPointImpl(); // non-static method call

关于c++ - 我如何从 C++ 中的静态线程入口点函数调用其他函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28644565/

相关文章:

qt - Qt Creator的工程文件(.pro)中如何修改PATH变量

linux - linux 默认应用程序如何在没有安装 Pthread 的情况下工作?

c++ - 多线程段故障析构函数

process - 阻塞等待和忙等待有什么区别?

c++ - 使用宏时出现意外结果

c++ - 使用 libstdc++ 在 Homebrew 中安装 OpenCV 3

c++ - C++ 和 C 中的 union 初始化

c++ - Qt:关闭期间的事件循环

c++ - C++ 和 Qt 5 中的 AES 256 加密

c++ - #include <opencv2/opencv.hpp> 在 VS 2013 中不起作用