Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6857247
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T01:59:32+00:00 2026-05-27T01:59:32+00:00

I have a Delphi application running under Windows that needs to block until another

  • 0

I have a Delphi application running under Windows that needs to block until another thread has delivered data. In other words, I need to wait on a synchronization object that from a particular thread I can put into the non-signaled state as if another thread held ownership of the object, so that when I call WaitFor() the thread blocks until one of the other threads unblocks it (there are more than one potential thread that can unblock and it is not known in advance which one). Note, all the threads have access to a shared data area so access to a common synchronization object is not a problem.

I thought Events were the right choice until I read this troubling blog post by Raymond Chen on the the problems with PulseEvent():

http://blogs.msdn.com/b/oldnewthing/archive/2005/01/05/346888.aspx

What is the correct synchronization technique to achieve this result? If you have a link to a Delphi or C/C++ example that would be great.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T01:59:33+00:00Added an answer on May 27, 2026 at 1:59 am

    Events are perfectly fine, just don’t use PulseEvent. Not only did Microsoft hopelessly botch the implementation, but its use is complicated by inherent race conditions. If the event occurs just before the thread blocks on the event, the event will be lost. Instead, use manual-reset events.

    To block:

    B1) Set the event to blocking.

    B2) Check to make sure the event hasn’t occurred yet and be sure you want to block on it. If necessary, put the event in a shared data structure where threads waking us will notice it.

    B3) Block on the event.

    To wake:

    W1) Update shared data to reflect the fact that the event has occurred.

    W2) Unblock the event. If necessary, traverse the shared data structure and unblock all events associated with whatever just happened.

    Here, there’s no race condition. If the event occurs after B1 or B2 but before B3, the block in B3 won’t actually block because W2 will unblock it. If the event has already occurred before W1, the thread will never block because B2 will see the effects of W1 and we’ll never get to B3.

    In most cases, operations B2 and W2 need to be done while holding a lock shared by all threads that handle events of this type.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have Windows Server 2008 R2 Machine that is running a Delphi 2007 application.
I have been running an application developed under Windows 7 in Delphi XE on
I have a Delphi application that has a document browser as the main form.
I have a Delphi 7 application that has two views of a document (e.g.
I have an application written in Delphi 2006 that was working fine in Windows
i have an application that was written in delphi it is fairly recent, running
I have an older application (written in Delphi 6) that has to be ported
I have a Delphi application similar to Taskbar Shuffle that includes a hook dll.
I have a Delphi 2009 application that runs a query over a database using
I have a delphi (Win32) web application that can run either as a CGI

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.