Форум: "Основная";
Текущий архив: 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