Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить ссылку на работающий Thread имея его ID [D7, WinXP]


slaga ©   (2006-03-24 14:22:00) 

Добрый день.

У меня есть ThreadID, мне нужно остановить, закрыть, удалить этот поток, как мне получить такую возможность ?

Заранее спасибо.


Игорь Шевченко   (2006-03-24 17:52:00) [1]

Leonid Troyanovsky ©   (24.03.06 16:56) [11]

Я же знак вопроса поставил :)


Leonid Troyanovsky   (2006-03-24 16:56:00) [2]


> Игорь Шевченко ©   (24.03.06 16:47) [8]

> Windows.pas ?


Т.е.,  D7+ ?

--
Regards, LVT.


slaga   (2006-03-24 16:55:00) [3]

в Windows.pas нет.

мне подсказывают что можно вот так:

const
 THREAD_ALL_ACCESS = $1F03FF;


Leonid Troyanovsky   (2006-03-24 16:54:00) [4]


> slaga ©   (24.03.06 16:03) [7]

> а в каком модуле описывается THREAD_ALL_ACCESS


В том обсуждении приводились значения

From JwaWinnt.pas available from http://delphi-jedi.org
(Win32 API Package in the API Library section):

THREAD_TERMINATE            = ($0001);
 {$EXTERNALSYM THREAD_TERMINATE}
 THREAD_SUSPEND_RESUME       = ($0002);
 {$EXTERNALSYM THREAD_SUSPEND_RESUME}
 THREAD_GET_CONTEXT          = ($0008);
 {$EXTERNALSYM THREAD_GET_CONTEXT}
 THREAD_SET_CONTEXT          = ($0010);
 {$EXTERNALSYM THREAD_SET_CONTEXT}
 THREAD_SET_INFORMATION      = ($0020);
 {$EXTERNALSYM THREAD_SET_INFORMATION}
 THREAD_QUERY_INFORMATION    = ($0040);
 {$EXTERNALSYM THREAD_QUERY_INFORMATION}
 THREAD_SET_THREAD_TOKEN     = ($0080);
 {$EXTERNALSYM THREAD_SET_THREAD_TOKEN}
 THREAD_IMPERSONATE          = ($0100);
 {$EXTERNALSYM THREAD_IMPERSONATE}
 THREAD_DIRECT_IMPERSONATION = ($0200);
 {$EXTERNALSYM THREAD_DIRECT_IMPERSONATION}

 THREAD_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3FF);
 {$EXTERNALSYM THREAD_ALL_ACCESS}

 SYNCHRONIZE              = ($00100000);
 {$EXTERNALSYM SYNCHRONIZE}

--
Regards, LVT.


Игорь Шевченко   (2006-03-24 16:47:00) [5]


> а в каком модуле описывается THREAD_ALL_ACCESS


Windows.pas ?


slaga   (2006-03-24 16:03:00) [6]

а в каком модуле описывается THREAD_ALL_ACCESS


Leonid Troyanovsky   (2006-03-24 15:25:00) [7]


> slaga ©   (24.03.06 14:40) [5]
> нашел такое:

> function OpenThread(dwDesiredAccess: DWord; bInheritHandle:
>  Bool;
> dwThreadId: DWord): DWord; stdcall; external 'kernel32.dll';
>


Это оно и есть (правда,  результат принято возвращать как THandle ).
Константы dwDesiredAccess можно посмотреть в топике
http://groups.google.com/group/fido7.ru.delphi/browse_frm/thread/60e9dcc14ee5febe/18d621d0da3a07d7?#18d621d0da3a07d7

--
Regards, LVT.


slaga   (2006-03-24 14:40:00) [8]

нашел такое:

function OpenThread(dwDesiredAccess: DWord; bInheritHandle: Bool;
dwThreadId: DWord): DWord; stdcall; external 'kernel32.dll';

но не понимаю что с этим делать потом :(


Leonid Troyanovsky   (2006-03-24 14:32:00) [9]


> slaga ©   (24.03.06 14:27) [2]

> а вот такая конструкция не подойдет ?

>  PostThreadMessage(ThreadID, WM_CLOSE, 0, 0)


Потоку принято посылать WM_QUIT.
Оно может и подойти, если, конечно, у него
есть message loop.

--
Regards, LVT.


slaga   (2006-03-24 14:32:00) [10]

хм. а можна небольшой пример по использованию OpenThread (с подключаемыми модулями)


slaga   (2006-03-24 14:27:00) [11]

спасибо,
а вот такая конструкция не подойдет ?

 PostThreadMessage(ThreadID, WM_CLOSE, 0, 0)


Leonid Troyanovsky   (2006-03-24 14:24:00) [12]


> slaga ©   (24.03.06 14:22)  

> У меня есть ThreadID, мне нужно остановить, закрыть, удалить
> этот поток, как мне получить такую возможность ?


OpenThread.
Непонятно, только, что значит закрыть,
да, впрочем, и зачем.

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо