Мне нужен способ приостановить выполнение функции в течение нескольких секунд. Я знаю, что могу использовать метод sleep для этого, но этот метод «замораживает» приложение во время его выполнения. Я также знаю, что я могу использовать что-то вроде кода ниже, чтобы избежать замораживания:Delphi: спящий режим без зависания и процессов
// sleeps for 5 seconds without freezing
for i := 1 to 5 do
begin
sleep(1000);
application.processmessages;
end;
Есть две проблемы такого подхода: один является тот факт, замораживание до сих пор происходит каждый за одну секунду, а вторая проблема является призвание " application.processmessages "каждую секунду. Мое приложение имеет интенсивность процессора, и каждый вызов процесса вызывает много ненужной работы, которая использует излишнюю мощность ЦП; Я просто хочу приостановить рабочий процесс, не более того.
Что я на самом деле нужно было бы способ приостановить исполнение так же, как в TTimer, в приведенном ниже примере:
// sleeps for 5 seconds
mytimer.interval := 5000;
mytimer.enabled := true;
// wait the timer executes
// then continue the flow
// running myfunction
myfunction;
Проблема такого подхода является «MyFunction» не будет ждать для MyTimer, он будет запускаться сразу после включения mytimer.
Есть ли другой подход для достижения такой паузы, как я хочу?
Заранее благодарен.
Так мой лучший вариант - использовать много TTimers с паузами, которые я хочу? – delphirules
Я немного озадачен фразой «каждый вызов вызова процесса делает много ненужной работы». Является ли ProcessMessages похожим на то, что делается, когда приложение не замерзает? Поэтому, если _not freezing_ делает _unnecessary work_, это должна быть область для исправления в первую очередь. –
Я делал такие вещи в различных приложениях по разным причинам. Самое главное, что это зависит от того, почему вам нужно его приостановить, - что будет направлять какой метод вы можете использовать для его обработки. – MikeD