- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于线程在其生命周期开始时缺少消息队列的问题。 MSDN 解释
The thread to which the message is posted must have created a message queue, or else the call to PostThreadMessage fails. Use one of the following methods to handle this situation:
(1) Call PostThreadMessage. If it fails, call the Sleep function and call PostThreadMessage again. Repeat until PostThreadMessage succeeds.
(2) Create an event object, then create the thread. Use the WaitForSingleObject function to wait for the event to be set to the signaled state before calling PostThreadMessage. In the thread to which the message will be posted, call
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
to force the system to create the message queue. Set the event, to indicate that the thread is ready to receive posted messages.
方法 (1) 解决了我的问题,对 PostThreadMethod()
的第二次调用在我的应用程序中始终成功。
但是,我想理解第二种方法,但根本不理解“事件对象”(当然不是普通的Delphi事件?)“到有信号状态”和“将事件设置为指示”。
问题:有人可以将第 (2) 段翻译成简短的 Delphi 代码示例吗?
最佳答案
这些事件对象是同步对象,MSDN 中对此进行了描述:Event Objects 。
该主题的底部是指向 Using Event Objects 的链接。其中提供了示例代码,展示了如何创建事件、设置事件、等待事件等。
简而言之,您使用以下功能:
CreateEvent
创建事件对象。CloseHandle
以销毁它。SetEvent
和 ResetEvent
用于设置和重置事件对象。WaitForSingleObject
等待收到信号。您可以使用TEvent
System.SyncObjs 单元中的类来包装所有这些低级 API 调用。那么流程就会变成这样:
TEvent
对象,例如处于重置状态的 Event
。Event
。Event.WaitFor
以等待工作线程发出其消息队列存在的信号。Execute
方法开始时),让它创建消息队列,然后通过调用 Event.SetEvent
设置事件>.关于multithreading - 帖子线程消息 : Create a message queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49610544/
我是一名优秀的程序员,十分优秀!