Главная страница
    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.044 c
2-1170311382
Lapushka-dochka
2007-02-01 09:29
2007.02.18
Как написать записть в Stream


2-1170402426
bmb58
2007-02-02 10:47
2007.02.18
Компонент Delphi


2-1169942418
Dot
2007-01-28 03:00
2007.02.18
размер файла WinSock


2-1169945216
Kostafey
2007-01-28 03:46
2007.02.18
Получение id записи


15-1169649184
Vlad Oshin
2007-01-24 17:33
2007.02.18
web программирование на delphi..даже не знаю как называется это





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