Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 04:37 18.05.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Спиране на процеснови  
АвторMишo (Нерегистриран)
Публикувано15.01.05 15:51



Здравейте..
Тук се мъча със следния проблем - имам две процедури, в едната се върти постоянен цикъл, който трябва да спре при Stop =True и когато спре тази процедура сваля InProgres =False;
В другата процедура съответно правя Stop =True и в нея чакам за InProgres=False. И тук е проблема, InProgres никога не става False по този начин и цикълът става безкраен. Въпросът ми е , как да изляза от този цикъл, и да знам, че е прекратен.Опитавх различни варианти - съобщения, нишки, но явно бъркам техниката.. Помагайте
Ето и част от кода..
------------------------------------------------------
implementation
{$R *.dfm}
var Stop,InProgres:True;

procedure TForm1.Button1Click(Sender: TObject);
begin
Stop :=False;
InProgres:=True;
While Not Stop Do
Begin
Application.ProcessMessages;
Memo1.Lines.Add('Стартиран.');
end;
Memo1.Lines.Add('Спрян.') ;
InProgres:=False;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Stop :=True;
While InProgres Do
Application.ProcessMessages;
end;
------------------------------------------------------
Помагайте.



Тема Вземи научи нишките (Thread) :)нови [re: Mишo]  
Автор NikB (любопитен)
Публикувано15.01.05 18:49



Ами при мен програмката ти върви без проблеми (почти):
1. Stop и ИнПогрес трябва да са боолеан;
2. в Мемото непрекъснато се пише "стартиран"
3. Най-добре разкарайуайла от бутон2 - не виждам смисъл от него, а и той "скрива" надписа "спрян" (извежда се след като излезеш от уайла (май:)

И ако напишеш за къф ти е тва - може и да измислим нещо по-



Тема Re: Вземи научи нишките (Thread) :)нови [re: NikB]  
АвторMишo (Нерегистриран)
Публикувано15.01.05 19:43



Ако разкарам while от бутон2 заработва, така е.
Но в истинския си вид това е функция, която трябва да стане True, само ако наистина е прекратил онзи безкраен цикъл в другата процедура.. а това се вижда от inProgress.. затова и я проверявам тая променлива.
Eто как е в проекта:
--------------------------------------------
Function StopProgress : Boolean;
Begin
Stop :=True;
While InProgres Do Application.ProcessMessages;
Result:=InProgres ;
end;
--------------------------------------------

За нишките - да. Все си мисля, че трябва да преместя онзи цикъл в някакв thread и да го стопирам със StopProgress , но не ми се иска да усложнявам кода. Затова и търся друго решение или идеи.



Тема Re: Вземи научи нишките (Thread) :)нови [re: Mишo]  
Автор andrew_nikoloff (bugbuster)
Публикувано16.01.05 09:24



Така написано
--------------------------------------------
Function StopProgress : Boolean;
Begin
Stop :=True;
While InProgres Do Application.ProcessMessages;
Result:=InProgres ;
end;
--------------------------------------------
няма много смисъл. Цикълът ти се изпълнява докато InProcess не стане False, т.е. излезеш ли от цикъла InProcess при всички случаи ще е False. Така че май функцията не върши това, което искаш.
С нищи не е толкова сложно, колкото си мислиш. Кодът ти няма да се усложни, но ще се изчисти. По-добър съвет от този, който ти даде NikB не можеш да получиш. Поиграй си малко с нишките. Ако изпитваш някакви затруднения - пиши тука и ще се постараем да ти помогнем



Тема Re: Вземи научи нишките (Thread) :) [re: andrew_nikoloff]  
АвторMишo (Нерегистриран)
Публикувано16.01.05 13:47



--------------------------------------------
Function StopProgress : Boolean;
Begin
Stop :=True;
While InProgres Do Application.ProcessMessages;
//Обърках го, като писах тук, във форума. Извинявам се
Result:=NOT InProgres ;
end;
--------------------------------------------
Всъщност, за да го прехвърля в нишка, ще е доста работа, тъй като, повечето от операциите са с VCL или разни променливи от основния thread и просто нямам идея как точно да го направя това.
Ще се наложи да пиша куп процедури synchronize, а пък още по-вероятно е да се наложи всичко да преправям, затова ми се искаше да намеря някакъв друг начин.
За сега съм го оставил така. StopProgress e процедура и онзи while е махнат. В този вариант изпълнението на основния процес спира нормално. Не е много чисто, но на този етап ми върши работа.
Всъщност, аз не съм програмист, а това, което правя е програмка, която би трябвало да ми помогне в работата, поради тази причина и нямам много време да принаписвам всичко наново. Ако имате някакви идеи, свързани с въпроса ми, но без използването на нишка, ще се радвам да ги обсъдим.
Благодаря.



Тема Re: Вземи научи нишките (Thread) :)нови [re: Mишo]  
Автор andrew_nikoloff (bugbuster)
Публикувано16.01.05 18:57



С или без not ефектът е един и същ - процедурата ти ще връща винаги едно и също. Това имах предвид, че нещо не е в ред в логиката й
Както и да е. Щом ти върши работа... Успех в работата!




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.