Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 03:32   #1
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию Как получить handle потока (TThread)?

Добрый день. Есть код потока(упрощенно)

Код:
type
  TLoader = class(TThread)
  private
     FUrl:string;
     FHtml:string;
     FIdHttp:TidHTTP;
     FThreadHandle:THandle;
  protected
    procedure Execute; override;
    procedure ShowPage; 
    function LoadHtmlPage(const Url:string):string;
  public 
    constructor Create(AStr:string);
    destructor Destroy; override;
  end;
....................

constructor TLoader.Create;
begin
  inherited Create(False);
  FIdHttp := TIdHTTP.Create(nil);
  FreeOnTerminate := True;
  Self.Priority := tpNormal;
  FUrl:=AStr;
  FThreadHandle:=(*вот тут непонятно, где взять значение дескриптора?*);
end;
..............
procedure TLoader.ShowPage;
begin
   Main.Label3.Caption:='Page Loaded';
   Main.Memo1.Lines.Add(FHtml);
   Main.Label2.Caption:=IntToStr(FThreadHandle); (*тут нужно отобразить дескриптор потока*)
end;
все чего удалось накопать это:

Код:
var 
  HandleChange: THandle;                       
begin 
  HandleChange := 
    FindFirstChangeNotification( 
      PChar(FPath),                            
      False,                                   
      FILE_NOTIFY_CHANGE_FILE_NAME +          
      FILE_NOTIFY_CHANGE_ATTRIBUTES );        //но это не то что нужно
Вопрос: откуда и как получить значение дескриптора потока?
Pcrepair вне форума Ответить с цитированием
Старый 28.03.2013, 08:57   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
type
  TLoader = class(TThread)
Цитата:
Вопрос: откуда и как получить значение дескриптора потока?
из стандартной справки F1
1.JPG
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.03.2013, 10:21   #3
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

все это известно: FThreadHandle:=Self.Handle;
Однако если запустить "Отладочное окно -> Потоки" то число которое получается из FThreadHandle:=Self.Handle; отличается от тех значений что видны в отладочном окне. и как это понимать?
Pcrepair вне форума Ответить с цитированием
Старый 28.03.2013, 10:58   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

2.JPG
1.JPG
Цитата:
Note: ThreadID is different than the thread’s handle in the Handle property.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.03.2013 в 11:03.
evg_m вне форума Ответить с цитированием
Старый 28.03.2013, 11:31   #5
Pcrepair
Форумчанин
 
Регистрация: 04.01.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Note: ThreadID is different than the thread’s handle in the Handle property.
отличается чем? там не сказано....
неясно следующее: Handle - это то с помощью чего можно в основном потоке управлять созданным потоком(загрузчик страниц)???? ну через полученный дескриптор ликвидировать зависший поток
++++++++++++++++++++++++++++++++++
Вот так получилось заиметь дескриптор процесса
Код:
private
.........................
     //FThreadHandle:THandle; //тут непонятно что
     FThreadHandle:TThreadID; // а тут дескриптор, который совпадает с результатом в окне отладчика
.........................
procedure TLoader.Execute;
begin
   FThreadHandle:=Self.ThreadID;
.........
однако, если использовать для ликвидации процесса функцию TerminateThread(MyHosedThread.Handl e, 0); это приводит к утечке памяти(что и понятно)
есть ли способ закрыть процесс без эксцессов?

Последний раз редактировалось Pcrepair; 28.03.2013 в 12:25.
Pcrepair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зная ProcessID получить Handle главной формы? NikLik Win Api 8 27.08.2021 21:29
Работа и корректное завершение потока TThread в любой ситуации... spamer Общие вопросы Delphi 9 03.04.2011 20:27
Как получить Handle моей программы? Eros Общие вопросы C/C++ 0 12.05.2010 19:29
Как получить handle главного окна, зная имя приложения? Altera Win Api 8 22.12.2008 18:52
Как отследить завершение выполнения потока TThread? Трик Общие вопросы Delphi 3 24.10.2007 14:55