Главная страница
    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.036 c
1-1085212226
Diver
2004-05-22 11:50
2004.06.06
Можно ли повернуть "имедж" на определенный угол обычными процедур


3-1084458282
Desdechado
2004-05-13 18:24
2004.06.06
обработка UNION в SELECT


1-1085633567
Le!
2004-05-27 08:52
2004.06.06
Без формы но с компонентом!


8-1080520839
3APA3A
2004-03-29 04:40
2004.06.06
Скопировать экран в буфер


1-1085129166
AlexXn
2004-05-21 12:46
2004.06.06
XML





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