2013-05-03 74 views
1

我的应用程序是一个简单的消息发送者/接收器通过TCP/IP与GUI。到目前为止,所有东西都是单线程的,但我想将TCP/IP通信块和GUI分割为不同的线程。就我所见,我需要一个共享数据结构(如QQueue <QString>)在GUI线程和TCP/IP线程之间来回传递消息。如何在GUI线程和工作线程之间共享数据?

问题是:我在哪里放置这个共享数据结构?如果我把它放在任何一个线程中,其他线程如何访问它? O使用QSharedMemory之类的东西会更好吗?

+0

您应该使用Qt的插槽和信号机制的GUI线程和工作线程之间共享数据。 – 2013-05-03 17:59:58

+0

借调...如果您必须表示新数据无论如何可能(可能),那么只需使用信号本身来传递数据。如果很多数据不想复制太多,则可能转而使用QMutex来控制对共享列表或队列的访问。 – darron 2013-05-03 18:06:57

+0

可能重复的[跨Qt线程共享数据](http://stackoverflow.com/questions/12372301/sharing-data-across-qt-threads) – cmannett85 2013-05-03 18:52:25

回答

0

我会亲自创建一个全局Singleton旋转缓冲区,它是线程间的共享资源。

让“feed thread”(来自TCP/IP线程)将数据放入缓冲区。 让您的“读取线程”(从您的GUI)从缓冲区中提取数据。

确保您对“puts”和“gets”具有适当的锁定以避免竞争状况和死锁。

约翰