- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 Delphi 2007 编写的相当简单的多线程 VCL gui 应用程序。我在多个子线程(最多 16 个并发)中进行了一些处理,这些子线程需要更新我的主窗体上的网格控件(只需将字符串发布到网格)。没有一个子线程相互交谈。
我最初的设计涉及调用 TThread's "Synchronize"在当前运行的线程中更新网格控件表单。但是,我知道调用 Synchronize 本质上就像调用时的主线程一样执行。一次运行多达 16 个线程(大多数子线程的处理时间从 < 1 秒到 ~10 秒),Window Messages 会是更好的设计吗?
我已经让它在这一点上工作,其中子线程发布一条 Windows 消息(由几个字符串的记录组成),而主线程有一个监听器,并在收到消息时简单地更新网格。
在这种情况下对 IPC 的最佳方法有何看法?窗口消息或“同步”?
如果我使用窗口消息,您是否建议将我发布到网格的代码包装在 TCriticalSection(进入和离开) block 中?或者我不需要担心线程安全,因为我正在主线程中写入网格(尽管在窗口消息处理程序的函数中)?
最佳答案
顺便说一句,您也可以使用 TThread.Queue()
而不是 TThread.Synchronize()
. Queue()
是异步版本,它不会阻塞调用线程:
(Queue
从 D8 开始可用)。
我更喜欢 Synchronize()
或 Queue()
,因为它比普通消息发送更容易理解(对于其他程序员)和更好的 OO(无法控制它或能够调试它!)
关于multithreading - 在主线程和子线程之间使用 TThread 的 "Synchronize"还是使用 IPC 的窗口消息更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1806339/
我是一名优秀的程序员,十分优秀!