c++ - C++中的线程共享数据

标签 c++ multithreading concurrency

我有一个 GUI 线程需要来自另一个线程(IO 线程)的信息。 IO 线程所做的就是从串行端口获取信息。 Gui Thread 所做的就是读取获取的信息并将它们显示在表格中。

我在想也许,IO 线程应该将数据放在一个受互斥体保护的全局结构中,然后 GUI 线程应该从该结构中读取。有更好的实现方式吗? 在这种情况下,使用临界区会比使用互斥锁更好吗?

现在我知道我会得到一个回复​​,说你为什么不只使用 GUI 线程来获取 IO 数据,这样我就不需要多线程了。是的,我知道我只是想举一个简单的例子来学习最佳实践:)

谢谢!

最佳答案

一种方法是让您的 IO 线程将输入数据发布到 GUI。每当您在 IO 线程上接收到数据时,您都会将其打包到堆上的一个结构中,并将自定义消息连同该结构的地址一起发送回 GUI 线程。 IOW 您创建 GUI 线程,然后 IO 线程将 GUI 线程的句柄传递给 IO 线程,用于将数据发送回 GUI。这样你就不需要关心互斥/关键部分,而是使用现有的 GUI 消息队列或创建你自己的,这取决于你的项目应该在什么环境中运行。

关于c++ - C++中的线程共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9582756/

相关文章:

c++ - 返回值 1.#INF000

c++ - std::enable_if 和通用引用的使用差异

c++ - 项目中共享模型的多线程同步

java - 线程在打印之前完成执行

java - 可直接访问的数据结构 Java

java - volatile 保证可变对象的安全发布?

C++ - 是否需要指针来覆盖返回类型 - 继承?

c++ - QT 应用程序在启动时崩溃 (c++ windows)

objective-c - iPad GUI 仅在触摸后更新

http - 多线程Go for HTTP get