Форум: "Прочее";
Текущий архив: 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