Главная страница
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.024 c
14-1085152846
ISP
2004-05-21 19:20
2004.06.06
Мод компа. До чего Half-Life довести может...


1-1085375644
ПсихЪ_клон
2004-05-24 09:14
2004.06.06
Шаблоны классов


14-1084606809
Denis_ada
2004-05-15 11:40
2004.06.06
клиент – сервер для работы с файлами и папками


1-1085137905
BFG9k
2004-05-21 15:11
2004.06.06
В ComboBox некорректно работает событие onChange


14-1085231790
guest_Dmitry
2004-05-22 17:16
2004.06.06
Помогите разобраться с ошибкой IB