How can I wait for a variable to change in a thread? For example I want to wait for a number to change. So instead of using Sleep()
what else is there?
while SomeVariable > 0 do
Sleep(1);
If you want to be notified when something changes, a bit of encapsulation can be your friend.
If SomeVariable
is a variable and not a property, change its declaration to const
. This will break all code that writes to it. That's a good thing; the compiler finds it for you instead of you having to search for it. Then create a procedure called SetSomeVariable
(leave it blank for the moment) and change the broken code to call this instead. When everything will compile, change SomeVariable
back to a variable, implement the setter routine, and if possible, encapsulate SomeVariable
so nothing will be able to set its value directly without calling the new function. (If it's a property, you can do this all much more simply by declaring a setter.)
Once you have a function that sets its value, you can introduce new effects into the process, such as having it set the signal of a TSimpleEvent
. (Or, if you want to be more sophisticated, have it set the signal if the new value <> the old value.)
Instead of sleeping, have your code WaitFor
the event. Remember to reset it afterwards!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With