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

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

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 11:58 22.06.24 
Клубове/ Компютри и Интернет / Delphi Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема Малко помощ?
Автор ИвKo (особняк)
Публикувано17.10.09 11:45  



Малко ми е трудно да обесня какво точно правя и какво точно не се получава, но ще се опитам.

Имам процедура която в един вътрешен за нея цикъл създава N на брой TThread-а - да кажем някъде към 5000 като се изчаква ако активните, създадени, TThread-ове са повече от 8 (вътрешно ограничение). Нещо от типа на:
 


var
FInThreads:Boolean; // Глобална променлива
FAskStop:Boolean; // Глобална променлива
FStartEnum:Boolean; // Глобална променлива
FRunningThreads:Integer = 0; // Глобална променлива

procedure StartThreads;
var
iCount:integer;
begin
FAskStop:=False;

try
try
For iCount:=0 to 4999 do
begin
FStartEnum:=True;
FCounterGuard.Enter; // FCounterGuard е TCriticalSection
try
Application.ProcessMessages;

if FAskStop then
begin
Exit;
end;

with TMyThread.Create(blah-blah) do
OnTerminate:=ThreadDone;

Inc(FRunningThreads);

finally
FCounterGuard.Leave;
end;

while FRunningThreads=MAX_ALLOWED_THREEADS do // 8 Threads
begin
Application.ProcessMessages;
Sleep(100);
end;
end;

except
// nothing
end;
finally
FStartEnum:=False;
end;

end;

procedure ThreadDone(Sender: TObject);
begin
FCounterGuard.Enter;
try
Dec(FRuningThreads);

//
// Blah-Blah-Blah
//

FInThreads:=(FRunningThreads>0) or FStartEnum;

finally
FCounterGuard.Leave;
end;

end;



От друга процедура, при "click" на бутон, някъде по средата на цикъла, присвоявам на
 FAskStop:=TRUE 
Според документацията, Exit би трябвало да предизвика спиране на for.. do и излизане от процедурата, без да нарушава try.. finally . Но при мен, Delphi 2010, това не се получава:


finally
FStartEnum:=False;
end;

никога не се извиква, при принудителен Exit
Някаква идея как да разреша този проблема?



Цялата тема
ТемаАвторПубликувано
* Малко помощ? ИвKo   17.10.09 11:45
. * Re: Малко помощ? SAGE_BS   18.10.09 00:55
. * Re: Малко помощ? ИвKo   18.10.09 08:57
. * Но е много странно NikB   28.10.09 08:17
. * Re: Но е много странно ИвKo   28.10.09 10:03
. * Не, не си се изложил :) NikB   28.10.09 11:24
. * Re: Не, не си се изложил :) ИвKo   28.10.09 16:08
Клуб :  


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

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