как остановить длинный цикл извне
Имеется длинный цикл из 10000 повторений, длящийся около 4 минут, как прервать его выполнение, щелкнув на кнопке.
В цикле вставь строку на подобии
Application->ProcessMessage() или
Application->ProcessMessages() (не помню точно, проверь по помощи).
Смысл в том, что приложение продолжает отработку сообщений.
А по нажатию на кнопку завершай цикл.
STOP=false;
for(;;)
{Application->ProcessMessages();
if(STOP) break;
…
…
…
}
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, ShiftState Shift)
{
if(Key==VK_ESCAPE) STOP=true;
}
Цитата:
Originally posted by Tristan
Цикл закончится при нажатии Esc
STOP=false;
for(;;)
{Application->ProcessMessages();
if(STOP) break;
…
…
…
}
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, ShiftState Shift)
{
if(Key==VK_ESCAPE) STOP=true;
}
Цикл закончится при нажатии Esc
STOP=false;
for(;;)
{Application->ProcessMessages();
if(STOP) break;
…
…
…
}
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, ShiftState Shift)
{
if(Key==VK_ESCAPE) STOP=true;
}
Советую цикл создавать в отдельном потоке, это грамотнее, безопаснее и эффективнее.