我如何从 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);
从那时起,您可以使用类似于隐式 this
的 self
使用非静态方法。或者您可以简单地调用另一个非静态但执行实际工作的方法,如下所示:
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 错误!
我的代码中有一个线程和一个入口点函数,如下所示:
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);
从那时起,您可以使用类似于隐式 this
的 self
使用非静态方法。或者您可以简单地调用另一个非静态但执行实际工作的方法,如下所示:
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 错误!