Как я могу ждать изменения переменной в потоке? Например, я хочу подождать, пока номер изменится. Итак, вместо использования Sleep() что еще есть?
while SomeVariable > 0 do
Sleep(1);
Ответ 1
Если вы хотите, чтобы вас уведомили, когда что-то изменилось, немного инкапсуляции может быть вашим другом.
Если SomeVariable - это переменная, а не свойство, измените ее объявление на const. Это сломает весь код, который пишет на него. Это хорошая вещь; компилятор находит это для вас вместо того, чтобы искать его. Затем создайте процедуру под названием SetSomeVariable (оставьте ее пустым на данный момент) и измените сломанный код, чтобы вызвать это вместо этого. Когда все будет скомпилировано, измените SomeVariable на переменную, реализуйте процедуру установки и, если возможно, инкапсулируйте SomeVariable, чтобы ничто не могло напрямую установить ее значение без вызова новой функции. (Если это свойство, вы можете сделать это гораздо проще, объявив сеттер.)
Как только у вас есть функция, которая устанавливает его значение, вы можете ввести новые эффекты в процесс, например, установить сигнал TSimpleEvent. (Или, если вы хотите быть более сложным, установите сигнал, если новое значение < > старое значение.)
Вместо того, чтобы спать, введите свой код WaitFor событие. Запомните reset после этого!