Zabicie procedury z innej procedury

2015-02-16 16:41
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

edytowany 2x, ostatnio: furious programming, 2015-02-16 21:13
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2015-02-16 21:14

Pozostało 580 znaków

2015-02-16 16:49
Wieczny Knur
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

Pozostało 580 znaków

2015-02-16 16:50
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.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2015-02-16 17:48
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

Pozostało 580 znaków

2015-02-16 18:51
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?


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek, 2015-02-16 18:51

Pozostało 580 znaków

2015-02-16 19:05
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

edytowany 1x, ostatnio: typczak, 2015-02-16 19:08

Pozostało 580 znaków

2015-02-17 00:27
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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2015-02-17 12:29
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

hmm wątek czeka na klawisz a obliczenia wykonywane są w głównym to ciekawe... nie powinno być odwrotnie? - kAzek 2015-02-17 12:50

Pozostało 580 znaków

2015-02-17 12:54
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.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2015-02-17 13:02
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

edytowany 1x, ostatnio: typczak, 2015-02-17 13:04

Pozostało 580 znaków

2015-02-17 13:49

jeszcze raz - NIE DA SIĘ ZAKOŃCZYĆ JEDNEJ PROCEDURY Z INNEJ TAK JAK TY TO SOBIE WYOBRAŻASZ. Można ubić na chama wątek albo napisać program poprawnie aby nie trzeba było takich kombinacji


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Założę się, że jeszcze co najmniej raz trzeba będzie to powtórzyć; - furious programming 2015-02-17 18:25

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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