Przerwanie, zatrzymanie funkcji

dział ogólny

Przerwanie, zatrzymanie funkcji

Nowy postprzez zurkow » piÄ…tek, 21 listopada 2008, 18:22

Witam.

Dziękuję autorom strony za naprawdę przydatne porady.

Szukam funkcji, algorytmu do przerwania innej funkcji po określonym czasie.

Dokładniej:
Piszę program, który odczytuje informacje z portu RS232. Mam funkcję ReadFile, która odczytuje przesłany z RS232 ciąg.
Problem jest taki, że ta funkcja czeka na ciąg znaków z rs232. Chciałbym, żeby po jakimś czasie, żeby przerwać działanie funkcji RS232.

Mam nadzieję, że jasno się wyraziłem ;) Jeśli nie, to wybaczcie bo jestem (praktycznie) samoukiem i nie znam jeszcze specjalistycznego słownictwa ;)
Avatar użytkownika
zurkow
Bladawiec
Bladawiec
 
Posty: 1
Dołączył(a): piątek, 21 listopada 2008, 18:16
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Przerwanie, zatrzymanie funkcji

Nowy postprzez Cyfrowy Baron » piÄ…tek, 21 listopada 2008, 19:05

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ą.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 45 gości

cron