English 中文(简体)
视窗的正确校对同步目标是什么,使read子能够等到另一个read锁时?
原标题:What is the correct thread synchronization object in Windows that allows a thread to wait until another thread unblocks it?

我的Delphi应用程序在Windows下运行,需要加以阻挡,直到另一个校对已经提供数据。 换言之,我需要等待一个同步的物体,即从某个特定表面上我能够进入<>未签署的国家,就像另一个透视者拥有该物体,这样,当我称之为WaitFor()时,th区直到另一个胎圈之一(其位置是能够unblock<<>>/em>的不止一个潜在read子,而且不知在上面。 请注意,所有线索都可以进入一个共享的数据区,因此获得共同同步物体并非问题。

我想Events是正确的选择,直到我阅读了雷蒙·陈关于PulseEvent(以下简称“PulseEvent”)问题的这一令人不安的博客的话:

实现这一结果的正确同步技术是什么? 如果你与“德尔菲”或“C/C++”这一伟大的例子有联系。

最佳回答

事件完全是罚款的,只是不使用PulseEvent。 微软不仅毫无希望地控制了执行工作,而且由于其固有的种族条件,其使用也变得复杂。 如果事件发生在事件发生之前,事件就会消失。 相反,使用人工重建活动。

封锁:

B1) 确定阻止活动。

B2)检查,以确保事件尚未发生,并确保你希望阻止。 必要时,将这一活动放在一个共享的数据结构中,使我们了解情况。

B3)活动区。

催复:

W1) 更新共享数据,以反映事件发生的事实。

页: 1 必要时,推翻共享数据结构,揭开所有与任何事情相关的事件。

这里没有种族条件。 如果事件发生在B1或B2之后,但在B3之前,B3的区块由于W2将拆卸而实际上赢得了路障。 如果该事件发生在W1之前,那么由于B2会看到W1的影响,我们永远不会去B3。

在大多数情况下,B2和W2号业务需要做,与此同时,处理这类事件的所有线索要24小时。

问题回答

正当使用自动启动活动。 见创作功能参数。 你们将需要为每一线人举办一个需要等待的活动。 Just calls SetEvent, and no other functions such as PulseEvent or ResetEvent. 瓦伊特森林公司将自动重新启动活动。 如果在你打电话给WaitFor之前就已安排了这次活动,那将立即返回,重新确定活动。





相关问题
Why running a service as Local System is bad on windows?

I am trying to find out the difference between difference service account types. I tumbled upon this question. The answer was because it has powerful access to local resources, and Network Service ...

Programmatically detect Windows cluster configuration?

Does anyone know how to programatically detect that a Windows server is part of a cluster? Further, is it possible to detect that the server is the active or passive node? [Edit] And detect it from ...

get file icon for Outlook appointment (.msg)

I ve read Get File Icon used by Shell and the other similar posts - and already use SHFileInfo to get the associated icon for any given extension, and that works great. However, Outlook uses ".msg" ...

Identifying idle state on a windows machine

I know about the GetLastInputInfo method but that would only give me the duration since last user input - keyboard or mouse. If a user input was last received 10 minutes ago, that wouldn t mean the ...

Terminating a thread gracefully not using TerminateThread()

My application creates a thread and that runs in the background all the time. I can only terminate the thread manually, not from within the thread callback function. At the moment I am using ...