Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Помогите разобраться с тридами в Delphi
Посл.ответ Сообщение


Ранг: 95.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 апреля 2008 09:29
· Личное сообщение · #1

Вроде все просто, но из функции пытаюсь вызвать трид в котором цепляюсь к удаленному реестру, а в теле основного процесса проверяю как прошел коннект (через глобальную переменную). Так вот проблема в том, что если машина к реестру которой я цепляюсь мертва, то трид зависает очень на долго и не дает вернуться в основной процесс. Вот код, которым пользуюсь:
--------------------/-//-/-/-//-/-/----------------
MyThread = class(TThread)
private
{ Private declarations }
protected
procedure THConnect;
procedure Execute; override;
end;
--------------/-/-/-/-/-/-/-----------------------
var
NetForm: TNetForm;
RConnected:boolean;
r:Tregistry;
GlobalNetName:string;
T:MyThread;

procedure MyThread.Execute;
begin
Synchronize(THConnect); //вызываем процедуру коннекта
end;

procedure MyThread.THConnect;
begin
RConnected:=false;
RConnected:=r.RegistryConnect('\'+GlobalNetName); //GlobalNetName - имя тачки к которой стучимся
end;
---------------------/-/-/-/-/-/-/-/-------------
function IsDeployed(NetName:string):integer;
var
r_in,i:integer;
reg, path, path1:string;
begin
GlobalNetName:=NetName;
r:=TRegistry.Create;
r.rootkey:=HKEY_LOCAL_MACHINE;
T:=MyThread.Create(false); /// Создаем трид
for i:=0 to 20 do ///по идее, сразу после его создания должны вернуться сюда, но насмерть зависаем, если машина мертва
begin
if RConnected=false then /// вот здесь проверяем состояние коннекта к удаленному реестру
begin
sleep(100); /// и если через 2 секунды не удалось подключиться, то вылим дальше...
end
else
break;
end;

if RConnected=true then
begin................и далее уже не интересно...

-----
бессмысленные манипуляции не становятся более разумными если их повторять




Ранг: 47.5 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 24 апреля 2008 10:14
· Личное сообщение · #2

Во-первых: то что thread зависает при обращении к выключеной тачке - это нормально. Косяк в том, что зависает всё приложение, правильно понял?
Если да, то проблема здесь:

SecurAdmin пишет:
Synchronize(THConnect); //вызываем процедуру коннекта





Ранг: 95.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 апреля 2008 11:13
· Личное сообщение · #3

Всё спасибо, разобрался сам...это я тупанул, там дальше идет зависание. Тему закрываю.

-----
бессмысленные манипуляции не становятся более разумными если их повторять



 eXeL@B —› Программирование —› Помогите разобраться с тридами в Delphi
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати