Przerwanie procedury w try catch (...)

dział ogólny

Przerwanie procedury w try catch (...)

Nowy postprzez riddyk » wtorek, 22 lipca 2008, 23:46

Witam,

właśnie w swoim programie, zaczynam pisać obsługę błędów i komunikatów.

Kod: Zaznacz cały
     try {
      //... u wrażliwy kod
     } catch (...) {
     MessageBox(NULL,"Błędna wartość współczynnika filtra","Błąd",MB_ICONWARNING);
     // i co tu dopisać aby przerwać procedurę typu void ?
     }


Chciałbym, aby wynik tego działania był w rodzaju continue dla pętli, czyli przerywa działanie procedury, a program się nie zawiesza i czeka na kojne zdarzenie.
Niestety niemożna użyć return gdyż dzieje się to Buttonie i Borland się burzy jak chce mu zmienić voida na coś innego.
I nie tak drastyczne jak Application->Terminate();

Dopisywanie kolejnej zmiennej mnie nie zadawal bo dość sporo mam wrażliwych miejsc, i każdy musi mieć inny komunikat, a po każdym komunikacie program się cofa tak jakby nie było tego zdarzenia.
google to twój przyjaciel, pielęgnuj tą przyjaźń, rozmawiajcie, zadawaj mu pytania, na pewno Cię nie zawiedzie.
Avatar użytkownika
riddyk
Bladawiec
Bladawiec
 
Posty: 20
Dołączył(a): niedziela, 20 lipca 2008, 17:27
Lokalizacja: Gliwice
Podziękował : 0
Otrzymał podziękowań: 0
    NieznanyNieznana

Re: Przerwanie procedury w try catch (...)

Nowy postprzez Cyfrowy Baron » środa, 23 lipca 2008, 09:47

Nie bardzo zrozumiałem. Masz jakieś zdarzenie OnClick dla przycisku Button i chcesz je przerwać, w takim razie wystarczy wrzucić return; bez żadnych parametrów na końcu:

Przykład:
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   for(int i = 0; i < 1000; i++)
   {
     if(i >= 500) return; // przerywa działanie pętli gdy wartość i wyniesie 500
   }
   // return po przerwaniu działania pętli przechodzi tutaj i wykonuje dalszy kod w zdarzeniu.
}


O co dokładnie chodzi z try{;}catch(...){;} działanie tego jest takie: spróbuj wykonać instrukcje zawarte w bloku, a jeżeli się nie uda to wykonaj instrukcje zawarte w drugim bloku, czyli pierwsze instrukcja zawarta w try jest instrukcją warunkową - jeżeli możliwe zostanie wykonana, druga instrukcja jest bezwarunkowa - koniecznie wykonaj to działanie.

Opisz bardziej zrozumiale problem.




Czytając Twój opis odniosłem wrażenie, iż sądzisz, że funkcja return zawsze musi coś zwracać, ale tak nie jest, jeżeli return zostanie umieszczone w funkcji która nic nie zwraca (void) to return również nic nie zwraca, ale zawsze przerywa działanie bloku w którym zostanie umieszczone, czyli nie koniecznie całej funkcji, jak w przykładzie wyżej.
Nie można zmieniać konstrukcji zdarzeń, a same funkcje zdarzeń nigdy niczego nie zwracają bezpośrednio, niektóre funkcje robią to poprzez argumenty. Kształt funkcji jest zdefiniowany w bibliotekach i taki musi pozostać, ma to związek z bibliotekami MFC, na których opera się cały mechanizm API.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4730
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Przerwanie procedury w try catch (...)

Nowy postprzez riddyk » środa, 23 lipca 2008, 10:33

Oto chodziło, nie wiedziałem że return można dopisywać do funkcji typu void. Nigdzie tego nie wyczytałem. A jak próbowałem dopisywać do fukcji typu void, return to zawsze pisałem mu wartość i borland się pluł że coś zwraca.
google to twój przyjaciel, pielęgnuj tą przyjaźń, rozmawiajcie, zadawaj mu pytania, na pewno Cię nie zawiedzie.
Avatar użytkownika
riddyk
Bladawiec
Bladawiec
 
Posty: 20
Dołączył(a): niedziela, 20 lipca 2008, 17:27
Lokalizacja: Gliwice
Podziękował : 0
Otrzymał podziękowań: 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 4 gości

cron