![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк Sleep в TThread [D7, Win2k, WinXP]
Witaliy © (2003-10-05 13:24:00)
Есть процедура :
procedure TMyThread.SndMsg;
var
i: Integer;
Begin
For i:=0 To Main.MainForm.ServerSocket.Socket.ActiveConnections-1 Do
Begin
If Main.MainForm.ServerSocket.Socket.Connections[i].RemoteAddress=IP Then
Begin
Main.MainForm.ServerSocket.Socket.Connections[i].SendText(CommandsString);
End;
End;
End;
procedure TMyThread.Execute;
Begin
While Terminated=False Do
Begin
Synchronize(SendMessage);
Sleep(5000);
^^^^^^^^^^^
End;
End;
Так вот, трабл заключается в том, что если в программе происходит какой-либо Exception( не в этом потоке, а в пртоке основной программы), то функция Sleep засыпает и не просыпается, т.е. например Появляется в приложении окно с ошибкой, я нажимаю скажем OK и поток дальше не выполняется. Подскажите если кто знает в чем дело. Программа написана в Delphi 7 и работает под OS Win XP и 2000
Digitman (2003-10-06 08:00:00) [1]
> Судя по тому что сообщения нет, Except тоже не происходит
> у потока.
обращение из доп.код.потока к объектам VCL, работающим с канвой, недопустимо без синхронизации с осн.код.потоком
см. Synchronize()
DiamondShark (2003-10-05 22:33:00) [2]
{$flood+}
Пошто тему в "Сети" перенесли?
{$flood-}
DiamondShark (2003-10-05 22:31:00) [3]
Вообще-то, поток в таком случае прибивается...
Отладчик-то на что даден? Кто мешает окошко Threads посмотреть.
Witaliy (2003-10-05 14:10:00) [4]
procedure TMyThread.Execute;
Begin
try
...
ShowMessage(0,"Before","",0);
Sleep(50000);
ShowMessage(0,"After","",0);
except
ShowMessage(0,"Except","",0);
end
End;
Сделал так. Судя по тому что сообщения нет, Except тоже не происходит у потока.
Digitman (2003-10-05 13:51:00) [5]
procedure TMyThread.Execute;
Begin
try
...
except
.. здесь при необходимости ведем лог исключений
end
End;