Nie można bezpośrednio ingerować w jakąś funkcję tak by nakazać jej bezpośrednio przerwanie działania, ale można to zrobić pośrednio posługując się zmienną globalną. Skoro tworzysz program dla portu RS232 to zakładam, że nie jesteś całkowitym laikiem jeżeli chodzi o programowanie, dlatego posłużę się przykładem.
Mam funkcję, która uruchamia nieskończoną pętlę
for. Funkcję tą uruchamiam w zdarzeniu OnClick dla Button1 i chcę ją zatrzymać w zdarzeniu OnClick dla Button2, w tym celu definiuję zmienną typu BOLEAN i to nią posłużę się do zatrzymania funkcji, gdy zmienna przyjmie wartość true, funkcja będzie działała, gdy przyjmie wartość fale funkcja przerwie działanie. Zmienną bool muszę w tym przypadku umieścić w pętli wraz z funkcją odświeżającą proces inaczej nie uda się jej przerwać. Do wyrzucenia (przerwania funkcji) posłużę się funkcją return:
- Kod: Zaznacz cały
bool przerwij;
void funkcja(void)
{
for(;;)
{
Application->ProcessMessages(); // odświeżanie procesu
if(przerwij == false) return; // przerwanie działania funkcji
}
}
//-----------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
przerwij = true;
funkcja();
}
//---------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
przerwij = false;
}
To tylko prosty - niedoskonały, przykład pokazujący jak sterować funkcją za pomocą zmiennej globalnej. Jeżeli chcesz, żeby coś zostało przerwane po jakimś czasie to posłuż się obiektem Timer i to w nim steruj zmienną.