我的代码中有一个线程和一个入口点函数,如下所示:
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/