gpt4 book ai didi

c++ - moveToThread() 而不是 start() 适用于未构造的对象?

转载 作者:行者123 更新时间:2023-11-27 23:59:27 24 4
gpt4 key购买 nike

我有这样的东西:

main.cpp

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
static Communication *c = new Communication();
return a.exec();
}

communication.cpp

t 是 Qthread 对象...

Communication::Communication() 
{
client = new EchoClient(QUrl(QStringLiteral("ws://localhost:1234")), 0);
client->moveToThread(&t);
connect(&t, SIGNAL(started()), client, SLOT(proces()));
t.start(QThread::HighestPriority);
}

当我调用构造函数时,该对象尚未创建但将在主循环的下一次迭代中怎么可能?我试图首先实现这一点,对象将被创建,然后移动到线程,并且将在等待用户输入的同时并行监听消息。

谢谢

编辑

我只想将客户端添加到另一个线程,因为在主线程中,如果我稍微增强一点,我想像这样等待用户输入

Communication::Communication() 
{
client = new EchoClient(QUrl(QStringLiteral("ws://localhost:1234")), 0);
client->moveToThread(&t);
connect(&t, SIGNAL(started()), client, SLOT(proces()));
t.start(QThread::HighestPriority);


std::cout << "\n***************CLIENT MENU***************\n";
std::cout << "(1): SHOW
std::cout << "(2): EXIT\n";
std::cout << "***************************************************\n";

std::cin >> m_choice;

}

问题是它会显示菜单,它会被阻止并且收不到任何消息

最佳答案

控制台I/O阻塞:当cin >> m_choice在主线程中等待用户输入时,主线程不能做任何事情。事件循环不会运行,主线程中的任何槽都不会运行,等等。

您可能希望将基于控制台 I/O 的菜单系统移动到专用线程,并通过信号/槽将其与系统的其余部分连接。

关于c++ - moveToThread() 而不是 start() 适用于未构造的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306793/

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