Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

TCriticalSection   Найти похожие ветки 

 
boba   (2008-02-26 09:47) [0]

В каких "не потоковых" случаях применяют TCriticalSection: например, в каких ситуациях он может понадобиться ещё?

У меня абсолютно безполезный пример ниже. Как на его работу будет сказываться TCriticalSection?

А если вместо записи в Memo, мне потребуется записывать данные в файл?
 TTimerDummyClass = class(TObject)
 private
   FTimer: TTimer;
   FOnMyTimer: TGetStrProc;
   procedure _OnTimer(Sender: TObject);
 public
   constructor Create;
   destructor Destroy;
   property OnMyTimer: TGetStrProc read FOnMyTimer write FOnMyTimer;
 end;

{ TTimerDummyClass }

constructor TTimerDummyClass.Create;
begin
 inherited;
 FTimer := TTimer.Create(nil);
 with FTimer do
 begin
   Interval := 1000 + Random(2000);
   OnTimer := _OnTimer;
   Enabled := True;
 end;
end;

destructor TTimerDummyClass.Destroy;
begin
 FTimer.Free;
 inherited;
end;

procedure TTimerDummyClass._OnTimer(Sender: TObject);
begin
 if Assigned(FOnMyTimer) then
   FOnMyTimer(Format("Hello! Int = %d", [TTimer(Sender).Interval]));
 TTimer(Sender).Enabled := False;
end;

procedure TForm1._OnMyTimer(const S: string);
begin
 CriticalSection.Enter;
 Memo1.Lines.Add(S);
 CriticalSection.Leave;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CriticalSection := TCriticalSection.Create;
end;


 
boba   (2008-02-26 09:49) [1]

Забыл:
procedure TForm1.Button1Click(Sender: TObject);
var
 ClassArr: array of TTimerDummyClass;
 i: Integer;
begin
 SetLength(ClassArr, 10);
 for i := Low(ClassArr) to High(ClassArr) do
 begin
   ClassArr[i] := TTimerDummyClass.Create;
   ClassArr[i].OnMyTimer := _OnMyTimer;
 end;
end;


 
Сергей М. ©   (2008-02-26 09:50) [2]


> В каких "не потоковых" случаях применяют TCriticalSection


Ни в каких. Исключительно в "потоковых", причем в контексте одного и того же текущего процесса.


 
Сергей М. ©   (2008-02-26 09:51) [3]


> Как на его работу будет сказываться TCriticalSection?


Абсолютно никак.


 
tesseract ©   (2008-02-26 09:52) [4]


> В каких "не потоковых" случаях применяют TCriticalSection:
>  например, в каких ситуациях он может понадобиться ещё?


А зачем она в непотоковых ? Твой таймер должен из очереди срабатывать вообще-то.

И применяться она несколько не так :

CrtitialSection.Acquire;

try

finally  
  CriticalSection.Leave;
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
3-1191587246
BlackCat
2007-10-05 16:27
2008.03.23
Разграничение полномочий в приложении, работающем с БД


11-1186478815
kichrot
2007-08-07 13:26
2008.03.23
Уничтожение не модальной формы с Parent = nil


6-1183235019
TNMNNTP
2007-07-01 00:23
2008.03.23
TNMNNTP


6-1180019290
flaxe
2007-05-24 19:08
2008.03.23
"Фильтр" пакетов


8-1177567835
givigudze
2007-04-26 10:10
2008.03.23
Звук м,е,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский