Wątek działa cały czas, dopóki nie zostanie zatrzymany, jeżeli w jednym wątku umieszczasz najpierw instrukcję ukrywającą, a potem odkrywającą, to jest oczywiste, że obiekt zostanie najpierw ukryty a zaraz potem odkryty i taki pozostanie zgodnie z kolejnością wykonywania się instrukcji.
Kolejna sprawa, to wątek działa do zakończenia wszystkich zawartych w nim instrukcji, to nie Timer, czyli jeżeli raz wywołasz wątek zgodnie z podanym przykładem, to wykona on zawarte w nim instrukcji od początku do końca, ale po zakończeniu instrukcji nie powróci do początku funkcji, po prostu dalej będzie działał oczekując na nowe instrukcje, których nigdy nie otrzyma, gdyż funkcja tego nie przewiduje, dlatego Twój wątek wykonuje instrukcje tylko raz i nigdy nie powróci, żeby wykonać instrukcje ponownie.
Posługując się funkcją
goto możesz zmusić wątek do powrotu na początek funkcji zawsze gdy dojdzie do końca:
- Kod: Zaznacz cały
void Obsluga_panelu_zasilacza_1 (void)
{
lab_1: // etykieta powrotu, na końcu jest dwukropek nie średnik
if(OdczytADC(*"1")==0)
{
Form1->Panel_zas1->Visible = false;//Hide();
Form1->Label_brak_modulu1->Visible = true;//Show();
return false;
}
Form1->Panel_zas1->Visible = true;//Show();
Form1->Label_brak_modulu1->Visible = false;//Hide();
Form1->Button_on_off_zas1->Caption = Form1->adc.On_Off;
if(Form1->adc.On_Off == "Wlacz")
{
........
// return true; // return przerywa wykonywanie funkcji, wiec należy to usunąć
}
else
{
...............
// return true; // return przerywa wykonywanie funkcji, wiec należy to usunąć
}
goto lab_1; // powrót do początku, na końcu jest średnik
}
Tak skonstruowana funkcja będzie się wykonywać w nieskończoność, wiec powinna być wykonywana tylko w wątku, gdyż tylko zatrzymanie wątku może zatrzymać funkcję.
Powinieneś coś wiedzieć o funkcji
return, otóż powoduje ona zawsze przerwanie wykonywania instrukcji, jeżeli więc umieścisz ją gdzieś w funkcji i nastąpi jej wywołanie, to dalsze instrukcje znajdujące się pod funkcją
return nigdy nie zostaną wywołane, dlatego usunąłem je z funkcji, dobrze jest więc zmienić typ funkcji z BOOL na void, żeby nic nie zwracała.