Главная страница
    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.46 MB
Время: 0.007 c
2-1203619274
Антон
2008-02-21 21:41
2008.03.23
выгрузка dll из пямяти


2-1203747829
SKIPtr
2008-02-23 09:23
2008.03.23
Работать с окнами по составленному сценарию


15-1202789867
Slider007
2008-02-12 07:17
2008.03.23
С днем рождения ! 12 февраля 2008 вторник


15-1202823736
Kerk
2008-02-12 16:42
2008.03.23
Нюансы общения с заказчиками


2-1203495233
Dymok
2008-02-20 11:13
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский