我有这样的事情:
的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);
}
当我调用构造函数时,该对象怎么可能还没有被创建但是会在主循环的下一次迭代中?我试图实现这一点,首先创建对象,然后移动到线程,并在等待用户输入时顺便听取消息。
THX
修改
我只想将客户端添加到另一个线程,因为在主线程中我想等待用户输入,如果我稍微增强一点
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;
}
问题是它会显示菜单,它会被阻止而不会收到任何消息
答案 0 :(得分:3)
控制台I / O阻塞:当cin >> m_choice
等待主线程中的用户输入时,主线程无法执行任何其他操作。事件循环不会运行,主线程中的任何插槽都不会运行,等等。
您可能希望将基于控制台I / O的菜单系统移动到专用线程,并通过信号/插槽将其与系统的其余部分连接。