gpt4 book ai didi

c++ - 我只是不了解 Qt 中的线程

转载 作者:行者123 更新时间:2023-11-28 03:21:35 25 4
gpt4 key购买 nike

好的,所以,这是交易。

我目前正在使用 SysV IPC 编写一个小型聊天消息模拟/项目,并且我将 Qt 用于我的客户端应用程序。我想要的是一个后台线程,它会在消息队列上等待,并在新消息到来时向 GUI 线程发送信号。我尝试使用 QThread 继承编写代码,但它似乎不起作用,消息未显示,我想我在这里遗漏了一些东西。

至于代码:ipcEventListener.h:

class IPCEventListener : public QThread
{
Q_OBJECT
public:
IPCEventListener();
void run();
messageWrapper mw;
signals:
void sendChatMsg(MSG_CHAT_MESSAGE cm);
};

ipcEventListener.cpp

IPCEventListener::IPCEventListener()
{

}
void IPCEventListener::run()
{
mutex.lock();
int n = msgrcv(myQueueId, &mw, sizeof(mw)-sizeof(long), 0, IPC_NOWAIT);
mutex.unlock();
if (n>0)
{
snip...
else if (mw.resp.type == MESSAGE)
{
emit sendChatMsg(mw.chatMsg);
}
}
exec();
}

主窗口.cpp:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
listener = new IPCEventListener(this);
connect(this->listener, SIGNAL(sendChatMsg(MSG_CHAT_MESSAGE)), this, SLOT(message_received(MSG_CHAT_MESSAGE)));
connect(this->ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
listener->start();
ui->comboBox->addItem("Client");
ui->comboBox->addItem("Room");
}
void MainWindow::message_received(MSG_CHAT_MESSAGE cm)
{
QString formattedMessage = "";
formattedMessage.append("[");
formattedMessage.append(cm.send_time);
formattedMessage.append("] ");
if (cm.msg_type == PRIVATE) formattedMessage.append("[PRIV:] ");
formattedMessage.append(cm.sender);
formattedMessage.append(": ");
formattedMessage.append(cm.message);
formattedMessage.append("\n");
ui->textEdit->append(formattedMessage);
}

我错过了什么?

(PS:我知道代码可能违反了大约十万个代码约定,但截止日期很快,我不得不求助于 kludges。不过这只是一个学校项目)。

最佳答案

您的代码中存在逻辑错误。您将 void IPCEventListener::run() 视为循环中的方法,并且再次执行 ang ag ag ag ag ag ag again 但事实并非如此。 QThread::run() 是仅初始化线程并执行 exec() 函数以启动事件循环的方法。这意味着在您的应用程序的当前版本中,您尝试只接收一次消息,然后您的线程只是在等待一些事件,而不对它们做任何事情。

所以您需要的是一个无限循环,您将在其中尝试接收消息。并且不要忘记在程序关闭时停止此循环。

关于c++ - 我只是不了解 Qt 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281297/

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