Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глюк 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо