![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить ссылку на работающий 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.