gpt4 book ai didi

c++ - Qt-Signal 未在虚拟机中连接

转载 作者:太空狗 更新时间:2023-10-29 23:11:36 26 4
gpt4 key购买 nike

我在 RedHat 7.4 上使用 GCC 4.8.5 和 Qt 4.8.5 进行开发和编译。代码必须静态链接。然后在运行 Scientific Linux 6.7 版的虚拟机上执行。 memcpy-Wrap 用于防止对更新的 GLIBC >= 2.4

的依赖

我有以下 MWE:

#include <iostream>
#include <unistd.h>
#include <QtCore>
#include <QThread>

__asm__(".symver memcpy, memcpy@GLIBC_2.2.5");
extern "C" {
void *__wrap_memcpy(void *dest, const void *src, size_t n) { return memcpy(dest, src, n); }
}

class Worker : public QThread {
void run() {
std::cout << "WORKER: Started." << std::endl;
QObject::connect(this, SIGNAL(finished()), QCoreApplication::instance(), SLOT(quit()));
int i=0;
while(i++<3) {
std::cout << "WORKER: I am running." << std::endl;
usleep(1e6);
}
std::cout << "WORKER: Finished." << std::endl;
}
};

int main(int argc, char** argv) {

std::cout << "MAIN: Init QCoreApplication" << std::endl;
QCoreApplication qtApplication(argc, argv);

std::cout << "MAIN: Init Worker" << std::endl;
Worker myWorker;
myWorker.start();

std::cout << "MAIN: Start Event-Loop." << std::endl;
qtApplication.exec();

std::cout << "MAIN: Event-Loop finished." << std::endl;
return 0;
}

这段代码是在 RedHat 系统上编译的

g++ -I$QTD/mkspecs/linux-g++ -I$QTD/include -I$QTD/include/QtCore -o mwe mwe.cpp  -Wl,--wrap=memcpy -L$QTD/lib/ -lQtCore -lQtNetwork -lglib-2.0 -lrt -lpthread -ldl -lz

$QTD 保存我的 Qt-4.8.5 安装。

在 Red-Hat-System 上预期并观察到以下行为:

MAIN: Init QCoreApplication
MAIN: Init Worker
MAIN: Start Event-Loop.
WORKER: Started.
WORKER: I am running.
WORKER: I am running.
WORKER: I am running.
WORKER: Finished.
MAIN: Event-Loop finished.

在 Scientific-Linux-System 上观察到以下行为:

MAIN: Init QCoreApplication
MAIN: Init Worker
MAIN: Start Event-Loop.
WORKER: Started.
WORKER: I am running.
WORKER: I am running.
WORKER: I am running.
WORKER: Finished.

然后应用程序永远不会完成。

在 Red-Hat-System 中,worker-thread 的 finished-signal 似乎连接到核心应用程序中的 quit-slot。这似乎不会发生在 Scientific-Linux-System 中。有没有人对为什么会发生这种情况以及如何调试它有任何建议?

最佳答案

您必须以正确的方式使用 QThread。重载 run() 函数是不安全的,诺基亚之前接受了它并展示了如何使用 QThread。

Look at this documentation .

关于c++ - Qt-Signal 未在虚拟机中连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49648042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com