我有一个 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/