用信号通知同一进程中的另一个线程
Signal another thread within the same process
我有一个应用程序,它处理某些数据,并在UI中显示这些数据。
最初,我只有一个线程,即主进程,来完成工作,即检索要处理的数据,处理数据,然后更新UI。数据驻留在另一台服务器上。
但是,应用程序的要求发生了变化,必须从服务器检索和处理比以前想象的多得多的数据。这造成了性能问题,因为必须检索、处理数据,然后UI必须确定它应该放在的哪里
UI是基于CListCtrl
的MFC控件。
为了解决这个问题,我将处理分为两个线程,一个获取数据并进行处理,另一个将显示数据,即GUI。
我需要某种方式向UI
线程发出信号,表明数据已被提取和处理。线程是使用CreateThread
创建的。向另一个线程发出信号表明它可以完成自己的工作的最佳方式是什么?
我建议如下:当您的单独线程必须通知GUI时,您应该向包含控件的窗口调用PostMessage。
消息参数应该是用户定义的消息,因此由您定义,例如
#define WM_MYMESSAGE (WM_USER + 1)
另外两个param(LPARAM和LPARAM(将包含需要传递给GUI的数据。因此,在CreateThread中,您需要传递一些关于将接收消息的窗口的信息(如果使用MFC,则为CWnd指针,否则为HWND句柄(。
然后,您需要在窗口中处理此消息(请参阅有关ON_COMMAND和类似宏的参考资料(
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在另一个线程中调用luaL_error会引发qWarning
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 结束另一个线程中使用的对象的生存期
- 从不同进程中的另一个线程挂起/恢复线程或进程
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 计时器是否从另一个线程启动?
- 互斥,Windows 10,c ++,在一个线程上获取,在另一个线程上发布
- Qt 在另一个线程中无限循环
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 从另一个线程发出信号是否安全?
- AMQP-CPP,libev >停止ev_loop来自另一个线程
- 在没有任何锁的情况下加入另一个线程后是否需要内存围栏?
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 如何在 qt 中从另一个线程运行 qt并发时关闭程序
- C++将互斥锁锁定为来自另一个线程
- QTcpSocket:消息不是从另一个线程发送的
- 如何从另一个线程调用颤振引擎方法
- 在另一个线程上发出 QObject 信号的正确方法?