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

Вниз

А в чем недостаток 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.069 c
3-1162115979
аматор
2006-10-29 12:59
2007.02.18
free база


1-1167054426
atruhin
2006-12-25 16:47
2007.02.18
Unit XXX implictly imported into package YYYY


2-1170424258
Garacio
2007-02-02 16:50
2007.02.18
Текущая дата в формате dd.mm.yy


1-1167111780
Layner
2006-12-26 08:43
2007.02.18
Как отловить перемещение DBGrid по горизонтальной прокуртке?


2-1169345000
ol_nazgul
2007-01-21 05:03
2007.02.18
ComboBox дублирование строк





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский