Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Проблема с потоком!   Найти похожие ветки 

 
opium ©   (2004-05-24 20:43) [0]

При запуске TThread виснет основное приложение, хоть приоритет у потока tpLowest. Быть может, проблема в этом : процедура потока грузится из DLL.


 
Polevi ©   (2004-05-24 20:50) [1]

код потока


 
opium ©   (2004-05-24 21:01) [2]

type  __DllFunc = function(FileName, FileNewName: PChar; Process,ProgressMessageInt: pToCardinal; ProgressMessageStr:pchar): Cardinal;stdcall;
type
 _CryptThread = class(TThread)
 private
   Initialized: Boolean;
   CrFileName, CrFileNewName: pchar;
   Owner: THandle;
   dllLibHandle: THandle;
   dllReturnNameFunc: __dllReturnNameFunc;
 public
   pToProcess, ProgressMessageInt: pToCardinal;
   ProgressMessageStr: pchar;
   Process: Cardinal;
   dllOptionsWindowFunc: __dllOptionsWindowFunc;
   dllFunc: __dllFunc;
   dllAlgoName: string;
   errCode: Integer;
   _Filesize: Cardinal;
   constructor Create(AppOwner:THandle;DllName, DllFunctionName: pchar);
   procedure Initialize(FileName, NewFileName: pchar);
   function ShowOptionsDialog: Boolean;
   procedure FileEncryptingFinished;
   procedure Execute; override;
 end;

constructor _CryptThread.Create(AppOwner: THandle;DllName, DllFunctionName: pchar);
 const RetNameFuncName: pchar = "ReturnName";
       ShowDialogFunc: pchar = "ShowOptionsDialog";
begin
 inherited Create(true);
 initialized:=false;
 FreeOnTerminate:=false;
 @dllFunc:=nil;
 DllLibHandle:=LoadLibrary(dllName);
 if dllLibHandle>=32 then @dllFunc:=GetProcAddress(dllLibHandle, DllFunctionName)
                     else errCode:=errLibraryNotFound;
 if @dllFunc<>nil then
   begin
     Initialized:=true;
     errCode:=0;
     @dllReturnNameFunc:=nil;
     @dllReturnNameFunc:=GetProcAddress(dllLibHandle,RetNameFuncName);
     if @dllReturnNameFunc<>nil then dllAlgoName:=dllReturnNameFunc else dllAlgoName:="unknown";
     @dllOptionsWindowFunc:=nil;
     @dllOptionsWindowFunc:=GetProcAddress(dllLibHandle,ShowDialogFunc)
   end
 else if errCode<>errLibraryNotFound then errCode:=errFunctionNotFound
end;

procedure _CryptThread.Execute;
begin
 pToProcess:=@process;
 if initialized then
     errCode:=dllFunc(CrFileName,CrFileNewName,pToProcess,ProgressMessageInt,ProgressMessageStr);
 Terminate;
 FileEncryptingFinished
end;

Вызов :
 CryptThread.Initialize(pchar(FileToCryptList.Items[0]),pchar(FileToCryptList.Items[0]+".enc"));
 CryptThread.Priority:=tpLower;
 CryptThread.execute


 
Ihor Osov'yak ©   (2004-05-24 21:51) [3]

хм.. А что в длл живет? Есть подозрение, что нечто страшное, VCLнутое..
Или может просто оконное :-)


 
Verg ©   (2004-05-24 21:58) [4]


> CryptThread.execute


Вот так поток не запускают ни в коем случае.

Resume


 
sniknik ©   (2004-05-24 23:15) [5]

> Terminate;
в теле execute лишнее, тем более прямо перед завершением и без цикла проверки Terminated.

> Вызов :
> CryptThread.Initialize(
> ...
первым должен вызыватся конструктор. а у тебя простая процедура.

> function ShowOptionsDialog: Boolean;
неужели там диалог, и он Show? аж в дрож пробивает... ;о)

боюсь это не все. ;о)) начни с чего попроще, примеры в дельфях посмотри.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.031 c
3-1084794227
Роман
2004-05-17 15:43
2004.06.06
Перевод с файл-сервер на клиент


3-1084640708
Knight
2004-05-15 21:05
2004.06.06
Как узнать номер новой записи добавленой через...


1-1085380730
therion
2004-05-24 10:38
2004.06.06
как цвет отдельной ячейки в StringGrid


1-1085368608
SASH2
2004-05-24 07:16
2004.06.06
Сообщение о загрузке формы?


9-1076264493
ArchangelM
2004-02-08 21:21
2004.06.06
Анимация!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский