[BCB6] wyświetlanie formy w wątku

0

Witam,

Mam problem z pokazywaniem formy w wątku. Oto mój przykład:

DWORD WINAPI Licznik( LPVOID lpParam ) {

   for(;;)
   {
      
      if(cos tam)
         Form6->ShowModal();

   }
}

Mój problem polega na tym, że gdy wywołam otwarcie Form6, a następnie zamknę ją, to program się zawiesza. Próbowałem wstrzymywać wątek przez funkcję SuspendThread(); ale nic z tego. Natomiast, gdy wywołuję otwarcie tej formy np. przez jakiś przycisk, to wtedy wszystko chodzi bez problemu. Czy może mi ktoś powiedzieć, jak prawidłowo wywołać jakąś formę w wątku, żeby program sie nie sypał?

Pozdrawiam.

W związku z tym iż nadal nie dostałem odpowiedzi, mój przykład wrzucam na serwer, proszę sprawdzić i w miarę możliwości pomóc w rozwiązaniu problemu. Po kliknięciu na start pokazuje się forma wywołana z wątku. Wątek jest wstrzymywany. Następnie, gdy klikamy ok, wątek jest wznawiany a program sie zawiesza. Widać to na komponencie CGauge który przy wstrzymaniu zatrzymuje się a przy wznowieniu dalej się przesuwa jednak forma staje się "jakby nieaktywna". Bardzo mi zależy na rozwiązaniu tego problemu

Przykład:
http://www.dzolk.info/tlen/przyklad.rar

0

Witam,
Ja mam ten sam problem:/ I nie wiem jak sobie poradzić... do tej pory pisałem głównie w Delphi a teraz w C++ Builder musze cos zrobic... Jest wątek główny i chce wyswietlić MessageBox aw trakcie jego trwania. Wątki robie podobnie jak w przykładzie zamieszczonym przez kolege wyżej. (pewnie ten sam kurs;) ) Ten sam problem jesli przerwe wątek a potem go uruchomię ponownie to Forma główna się zwiesza :/ Pomóżcie proszę!

p.s. Stawiam [browar] za pomoc :D

0

Nalezy uzyc obiektu TThread z BCB i za pomoca metody Synchronize() wywolac metode ktora zrobi Form->Show() , inny sposob to wyslac komunikac z watku stworzonego przez CreateThread i obsluga tego komunikatu wyswietla forme. Samo wywolanie Form->Show() z watku nie uda sie nigdy gdyz wywolanie takie (a takze wszystkie wywolanie odnoszace sie do komponentow wizualnych) musi byc zsynchronizowane z glowna petla komunikatow.

0

dzięki wielkie ;) działa! piwo sie należy, nawet 2:P

I mam znowu problem;/ Jeżeli chce wywołać każdą forme z osobna jest wszystko w porządku. Natomiast jezeli mam wywolac 2 formy pod rzad (tzn jeżeli jest spełniony warunek (cos_tam1) i (cos_tam2)) czyli zaraz po pokazaniu Form8 pokazuje mi sie Form9, to przy jej zamknięciu program się zawiesza;/ tak samo jak w poprzednim przypadku.

while(koniec==0)
{
  Sleep(50);

                if(cos_tam1)     
                {
                        Synchronize(PokazForme8);
                }

                if(cos_tam2)  
                {
                        Synchronize(PokazForme10);
                }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1