Zabicie procedury z innej procedury

0

witam jak mozna zamknac procedure z innej procedury ?? - chodzi mniej wiecej o to:

procedure ke;
begin

   while 1=1 do begin

if n=10 then 

//i tutaj komenda do zamkniecia procedury liczenie//

end;
end;
procedure liczenie;  
begin
   n:=1;
   while 1=1 do begin

   print(n);
   delay(1000);
   n:=n+1;
   end;
   end;

begin
...
...
//wystartowane ke i liczenie

end.

dzieki za odpowiedz

dodanie znacznika <code class="delphi"> - @furious programming

0

jak startujesz ke i liczenie? Ten kod wygląda na jednowątkowy więc procedury nie wykonują się jednocześnie tylko po kolei - wobec tego nie ma szansy z jednej zakończyć drugą

Jeżeli są to dwa wątki to wystarczy zmienić wartość zmiennej na której opiera się pętla w drugiej procedurze

0

Że co? Chyba przerwać wykonywanie a nie zamknąć procedurę.
Zastosuj globalną zmienną i pętli sprawdzaj jej stan czyli np. nie while 1=1 do tylko while (not Canceled) do.

0

Tak przerwac procedure

dalem przyklad ze zmiennymi - chodzi o to ze dwie procedury dzialaja jednoczesnie (jedna w tle sprawdza zmienną, a druga dziala ne tej zmiennej i jak spełni okreslony warunek to pierwsza przerywa wykonywanie drugiej procedury) - to wazne zeby jedna procedura zamknela druga

ta druga procedura jest dluuuuga i nie mozna czekac na zakonczenie jej - wiec chce ja przerwac z innej

0

No pisałem że można wykorzystać zmienną dajmy na to Canceled a więc:

if n=10 then 
  Canceled:= True; 

a while 1=1 dojak pisałem zmieniasz na while (not Canceled) do ewentualnie jak chcesz zakończyć całą procedurę to to możesz dać:

if Canceled then 
  exit; 

Tak w ogóle to zastanawiam się co to jest to "jednoczesne" działanie nie wiem wątki czy co?

0

tak sa dwa watki

jeden polega np na : napisz ..... czekaj ...... napisz ......czekaj ....... napisz..... czekaj ..... i to nie jest petla a drugi watek ma np : petle z oczekiwaniem na nacisniecie klawisza (cokolwiek - jakis warunek ) i jak spełni ten warunek (np nacisnie klawisz czy cokolwiek) to przerwie watek pierwszy (ten dluuuuuugi)

odpada If canceled then exit - bo nie bede wpisywal co chwile takiego warunku

1

CZY TAK TRUDNO ZROZUMIEĆ, ŻE WĄTEK A PROCEDURA TO SĄ DWIE RÓŻNE RZECZY!!
nie mogłem inaczej. A jak pytasz o takie rzeczy to jest to dowód na to, że wątki nie są dla ciebie

0

ok wiec tak:

uruchamiamm watek - ktory dziala w tle niezaleznie (czeka na nacisniecie klawisza), w glownym programie jest petla ktora po sprawdzeniu jakiejs zmiennej uruchamia dane procedury.

chodzi o to aby gdy jest uruchomiona jakas procedura to (po nacisnieciu klawisza) powinna zostac zamknieta i glowny program powinien dalej z petli po sprawdzeniu zmiennej uruchomic kolejna procedure

mam wszystko tylko nie wiem jaka komenda mozna zamknac aktualnie dzialajaca procedure - (ale z watka a nie z danej procedury) - nie wiem czy

opisalem to jasno - chyba juz prosciej nie mozna

0

Nie da się "zamknąć procedury" tak jakbyś ty to chciał. Można na chama (co jest wysoce niezalecane i nieprofesjonalne i za co powinni łapy ucinać o ile jest to normalna czynność w aplikacji) ubić wątek. I tyle. Z tego co napisałeś to masz uruchomioną jakąś procedurę w głównym wątku i ją chcesz zatrzymać. Jak ubijesz główny wątek to ubijesz aplikację. Jak dla mnie to cała aplikacja jest napisana niepoprawnie - czasochłonne operacje w głównym wątku a "czekanie na klawisz" w dodatkowym. Powinno być na odwrót. To co zajmuje dużo czasu przenosi się do osobnego wątku a obsługa GUI (w tym również reakcja na wciśnięcie klawisza) jak w normalnej aplikacji pozostaje w wątku głównym.

0

znaczy sie chce dodatkowa funkcje dodac aby po nacisnieciu klawisza wrocil do glownej petli w glownym watku ( z ktorej uruchamiamy procedury) i w/g mnie najprosciej aby powrocic do glownej petli to zakonczyc (nawet w polowie) procedure aktualnie dzialajaca - chyba ze sie myle i jest to niemozliwe zakonczyc procedure

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