Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
2-1203924360
md10
2008-02-25 10:26
2008.03.23
Звязные поля таблиц


11-1185952611
nikfel
2007-08-01 11:16
2008.03.23
Подобие кнопки в стиле XP.


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


2-1203702578
Igor23
2008-02-22 20:49
2008.03.23
Глупый вопрос...новсе же Memo


2-1204099770
vvv777
2008-02-27 11:09
2008.03.23
Раскрывать Node TreeView при наведении мыши через N секунд