Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.04 c
1-1096532410
slart
2004-09-30 12:20
2004.10.17
Drag&amp;drop


1-1096955475
DelphiN!
2004-10-05 09:51
2004.10.17
А в %C0


4-1095073086
UsAd
2004-09-13 14:58
2004.10.17
Запуск процесса


1-1097017042
Kirilllius
2004-10-06 02:57
2004.10.17
TreeView


4-1094910412
Davinchi
2004-09-11 17:46
2004.10.17
Получение WndProc от запущенного приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский