Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
14-1085073644
delphin12
2004-05-20 21:20
2004.06.06
hook на сканер


1-1085130912
Barsky
2004-05-21 13:15
2004.06.06
При НЕактивном окне нужно реагировать на нажатие горячих клавиш.


1-1085058711
Алекс
2004-05-20 17:11
2004.06.06
Поиск файла


1-1085639652
ilnarab
2004-05-27 10:34
2004.06.06
Как извлечь имя файла


14-1085123667
Layner
2004-05-21 11:14
2004.06.06
Статика на машине (2106), у кого то есть такое же?