Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизThread - как остановить поток ? Найти похожие ветки
← →
Amid (2004-10-01 15:08) [0]проблема с Thread-ом.
Сосдаю поток каторый загружает DLL, потом вызываю функцию (из DLL) которая соеденяется с сервером прилож. и ждёт сообщение. Как зделоть так чтобы этот поток закрылся если сообщение не пришло в течение 30 сек и написал в Мемо какоето сообщение ?
← →
Семен Сорокин © (2004-10-01 15:17) [1]GetTickCount или Now в начале ожидания, и в цикле сравнивать с предыдущим значением если больше 30 сек. - рубить цикл ожидания.
← →
Digitman © (2004-10-01 15:26) [2]с пом. какого компонента в доп.трэде осуществляется "соединение" с апп-сервером ?
← →
Суслик © (2004-10-01 15:31) [3]
> с пом. какого компонента в доп.трэде осуществляется "соединение"
> с апп-сервером ?
да в общем то и как ожидание реализовно тоже не мешало бы знать.
← →
Amid (2004-10-01 15:39) [4]Вот код програмы.
Програма на этот момент "@GetDocumentData:= GetProcAddress.." ждёт, где ставить этот цикл, как закрыть поток после 30 сек.
TGetDocumentData = function (.....);
Frid=Class(TThread)
private
GetDocumentData : TGetDocumentData;
V : Variant;
passdll : THandle;
protected
procedure Execute; override;
End;
Function TForm1.LoadPassportDll: THandle;
Begin
Result:= LoadLibrary("Passport2.dll");
If (Result = 0) Then
raise Exception.Create("Unable to load Passport2.dll");
End;
Procedure Frid.Execute;
Begin
passdll:= Form1.LoadPassportDll;
If (passdll <> 0) Then
Begin{****}
Try
@GetDocumentData:= GetProcAddress(passdll,
"GetDocumentData");
Except on E : Exception do End;
If (@GetDocumentData <> nil) then
Begin{qwe}
Try
CoInitialize(nil);
V:= GetDocumentData(Form1.EdUserName.Text,
Form1.EdPassword.Text);
CoUninitialize;
Except on E : Exception do End;
Form1.laDateIn.Caption:= VarToStr(V[3]);
Form1.laExpireDate.Caption:= VarToStr(V[4]);
Form1.laHologram.Caption:= VarToStr(V[5]);
..................
..................
End;{qwe}
End;{*****}
End;{}
← →
Семен Сорокин © (2004-10-01 15:46) [5]наверное ожидание происходит в DLL в GetDocumentData, дык там и надо выставлять таймаут, передавай его параметром, а тут у тебя даже цикла нет.
← →
Digitman © (2004-10-01 15:47) [6]В приведенном коде
1. Нет ни единого упоминания о "сервере приложений" с т.з. терминологии и механизма Делфи .. а есть упоминание о сервере автоматизации
2.
> Form1.laDateIn.Caption:=
начиная с этого места - до свидания ! ... вперед ! читать инф-цию о потоконебезопасности VCL до полного просветления !
← →
Amid (2004-10-01 16:04) [7]1. Соединение с "сервером прилож." пресходит в DLL в GetDocumentData.
2. Этот DLL не я создал, и иходники тоже нету.
3. Подскажите пожалуста как можна приостоноить (закрыть) этот поток после .. сек, если он работает ?
← →
Digitman © (2004-10-01 16:14) [8]
> 1. Соединение с "сервером прилож." пресходит в DLL в GetDocumentData.
принято к сведению
> 2. Этот DLL не я создал, и иходники тоже нету.
тогда твое дело - швах
> 3. Подскажите пожалуста как можна приостоноить (закрыть)
> этот поток после .. сек, если он работает ?
корректно, думаю - никак
← →
Семен Сорокин © (2004-10-01 16:17) [9]
>
> > 3. Подскажите пожалуста как можна приостоноить (закрыть)
>
> > этот поток после .. сек, если он работает ?
>
>
> корректно, думаю - никак
а если некорректно - то запускать в потоке, только не все, а вызов этой функции и рубить поток, чревато незакрытыми ресурсами и иже сним.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c