Главная страница
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.023 c
14-1084863291
kull
2004-05-18 10:54
2004.06.06
Сравнительная характеристика систем контроля версий...


3-1084541484
vv_fran
2004-05-14 17:31
2004.06.06
Глюк уникального ключа в FireBird 1.03


14-1084783479
Искать и не сдаваться
2004-05-17 12:44
2004.06.06
Одна песенка из фабрики-4.


1-1085643388
Fifa
2004-05-27 11:36
2004.06.06
модуль objects.pas


3-1084525896
ZiaTron
2004-05-14 13:11
2004.06.06
EDBEngineError with Message : Unknow database