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

How can i call an other function from static Thread entry point function in c++?

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

    static void *readerThreadEntryPoint(void *arg)

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

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

    QBytearray data = socket->ReadAll();

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

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

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

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

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

已找到解决方案, 我更改了这一行

pthread_create(&Modes.reader_thread, NULL, readerThreadEntryPoint, NULL);

到这个

pthread_create(&Modes.reader_thread, NULL, readerThreadEntryPoint, this);

然后我根据@John Zwinck 的建议编写了以下代码,

MainWindow *instance = static_cast<MainWindow *>(arg); QByteArray data= instance->socket->readAll();

我解决了 SIGSEGV 错误!