Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как идентифицировать рабочий поток?

1.8K
25 апреля 2008 года
Arkady
153 / / 18.12.2007
Допустим у меня dll, и для корректной работы одной из экспортируемых функций мне надо как-то идентифицировать потоки, которые могут её дергать.
Я точно знаю, что Windows обладает функцией, которая возвращает уникальное значение (номер) соответствующее потоку, которое вызвало эту функцию. Но я не могу вспомнить её имя, найти её на форуме и в интернете.
Сейчас перелистываю Рихтера (как Кот советовал), видел я её в нем. Но тоже пока найти не могу, где же именно я её видел.
Может быть кто-то помнит, как она выглядит, или может быть есть иные (например, какие-то кроссплатформенные средства) для получения праметра от потока, который бы позволял потоки идентифицировать?

Если найду - выложу.
479
25 апреля 2008 года
Ухух
142 / / 05.05.2006
а не GetCurrentProcessId()?
там в 6 главе
1.8K
25 апреля 2008 года
Arkady
153 / / 18.12.2007
Угу, шестая глава =) Тож ща нашел) Спасибо!

Цитата:

В Windows предусмот рены функции, позволяющие легко ссылаться на объекты ядра текущего процесса и потока:

HANDLE GetCurrentProcess();
HANDLE GetCurrentThread();

Обе эти функции возвращают псевдоописатсль объекта ядра "процесс" или "поток" Они не создают новые описатели в таблице описателей, которая принадлежит вызывающему процессу, и не влияют на счетчики числа пользователей объектов ядра "процесс» и "поток" Поэтому, если вызвать CloseHandle и передать ей псевдоописа тель, она проигнорирует вызов и просто вернет FALSE

Некоторые Windows-функции позволяют указывать конкретный процесс или по ток no его уникальному в рамках всей системы идентификатору. Вот функции, с по мощью которых поток может выяснить такой идентификатор — собственный или своего процесса:

DWORD GetCurrentProcessId();
DWORD GelCurrentThreadId();

По сравнению с функциями, которые возвращают псевдоописатели, эти функции, как правило, не столь полезны, но когда-то и они могут пригодиться.



Теперь у меня такой вопрос. Допустим эта DLL будет использоваться ещё иногда приложениями под Linux, как правильно реализовать универсальное получение уникального идентификатора потока?

1.8K
25 апреля 2008 года
Arkady
153 / / 18.12.2007
Ситуация следующая. Я оборачиваю один старый проект, который для каждого пользовательского потока создавал и вел собственный стек потока, который использовал для работы со своим ядром.
Соответственно большинство функционала на вход требовало указатель на стек потока. Моя идея - выкинуть это, скрыв от пользователя. Чтобы когда он дергал функцию - она сама определяла ID потока и понимала, какой ему соответствует стек и подставляла его.
Для винды это шикарно делается через GetCurrentThreadId, но вот как это делается универсально для любой платформы?
Может быть есть какие-то проторенные дорожки? Всё, что приходит в голову - инкапсулировать и дефайном определять, какую часть кода компилить для какой операционки (заодно ещё надо найти аналогичную функцию для unix).
А может быть есть какая-то кроссплатформенная функция определения, что за система используется? Ченить типа все договорились, что такой-то функцией проверяем. Нет? =)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог