When running a function asynchronously in the main thread, like
TThread::CurrentThread->Queue(NULL, somefunction);
before closing my app I'd like to make sure all events have finished. But all I can find is a way to remove pending events
TThread::CurrentThread->RemoveQueuedEvents(somefunction);
How do I wait for them to finish instead of removing all?
Unfortunately, the RTL doesn't really provide a mechanism to do what you are asking for, at least not directly.
You can try using a thread-safe counter that is incremented each time a function is queued, and decremented each time a queued function exits. Then, the main thread can call
CheckSynchronize()in a loop until that counter reaches 0.Or, you can simply terminate all of your worker threads, make sure they are fully terminated, and then just call
CheckSynchronize()1 time to process the final queue since nothing would be adding new entries to it anymore.