Strona 1 z 1

Przerwanie procedury w try catch (...)

Nowy postNapisane: wtorek, 22 lipca 2008, 23:46
przez riddyk
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.

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

Nowy postNapisane: środa, 23 lipca 2008, 09:47
przez Cyfrowy Baron
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.

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

Nowy postNapisane: środa, 23 lipca 2008, 10:33
przez riddyk
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.