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

Вниз

А в чем недостаток Synchronize?   Найти похожие ветки 

 
Сало ©   (2007-01-24 13:55) [0]

А то на том форуме часто встречается...
Если у меня поток, ждущий что кто-то бросит сообщение (TEvent), после получения сообщения поток вызывает метод некоего класса, который ему указан, то для вызова этого метода необходим Synchronize. Что тут неверного?


 
tesseract ©   (2007-01-24 13:57) [1]

А кто сказал, что неверно? Неверно весь поток в synchronize запихивать.


 
Игорь Шевченко ©   (2007-01-24 13:58) [2]


> А то на том форуме часто встречается...

может лучше и спросить на "том" форуме ?


 
BiN ©   (2007-01-24 13:58) [3]

На форуме часто встречается обсуждение некорректного использования этой функции. И только.


 
Сергей М. ©   (2007-01-24 13:59) [4]


> сообщение (TEvent)


Сообщение - это message.
А Event - это событие.

Разницу ощущаешь ?


> для вызова этого метода необходим Synchronize. Что тут неверного?


Неверно само утверждение, что именно "необходим".

"Возможно необходим" - вот верное утверждение.


 
Ega23 ©   (2007-01-24 14:13) [5]

Неправильно вот такое:


это часть проги, читающей с ком порта данные, т.е сделана так - ждет когда на буфер порта приходят данные и считывает их (WaitCommEvent)
когда данных нету, она висит в ожидании..
сделал отдельный поток для этой штуки, но форма все равно висит, в чем дело?

type
TFirstProcess=class(TThread)
private
  { Private declarations }
protected
  procedure Work;
  procedure Execute; override;
end;
.....
procedure TFirstProcess.Execute;
begin
//while not Terminated do
 Synchronize(Work);
end;

procedure TFirstProcess.Work;
var a:DWORD;
begin
  WriteCom;
  if SetCommMask(fHandle, EV_RXCHAR) then
     WaitCommEvent(fHandle, a, nil)
  else ShowMessage("cant wait for com buffer");
   if (a=EV_RXCHAR) then
     begin
      ReadCom;
    //mm1.Lines.Add(IntToStr(z)+"  "+s);
      PurgeComm(fhandle,PURGE_RXCLEAR);
     end;
 ClosePort;
end;

procedure TForm1.btn1Click(Sender: TObject);
Begin

  if btn1.Caption = "Stop" then
   begin
     P1.Terminate;
     btn1.Caption:="Go";
     Exit;
   end;

 if btn1.Caption ="Go" then
  begin
   p1:=TFirstProcess.Create(False);
   p1.Priority:=tpLowest;
   btn1.Caption:= "Stop";
  end;
End;
....


 
Ega23 ©   (2007-01-24 14:14) [6]

Конкретно - вот это:
procedure TFirstProcess.Execute;
begin
//while not Terminated do
Synchronize(Work);
end;



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

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
15-1169495911
tesseract
2007-01-22 22:58
2007.02.18
Замена outlook. Цена должна быть в разумных пределах.


15-1170181895
vasIzmax
2007-01-30 21:31
2007.02.18
Вот заморочка такая...


2-1169971490
LiteStone
2007-01-28 11:04
2007.02.18
Глюк


2-1170018465
san1
2007-01-29 00:07
2007.02.18
real в integer


4-1160336072
vidiv
2006-10-08 23:34
2007.02.18
Как "отрисовать" Path и получить его регион?