Главная страница
    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.05 c
15-1169679314
hmmmmmmmm
2007-01-25 01:55
2007.02.18
плата клика adSense


2-1170270440
RedBanner
2007-01-31 22:07
2007.02.18
Авторские прова


2-1169979892
w666w
2007-01-28 13:24
2007.02.18
Иероглифы в TMemo и TEdit


15-1169610550
Slider007
2007-01-24 06:49
2007.02.18
С днем рождения ! 24 января


2-1170272032
22b
2007-01-31 22:33
2007.02.18
POST на API





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