Как идентифицировать рабочий поток?
Я точно знаю, что Windows обладает функцией, которая возвращает уникальное значение (номер) соответствующее потоку, которое вызвало эту функцию. Но я не могу вспомнить её имя, найти её на форуме и в интернете.
Сейчас перелистываю Рихтера (как Кот советовал), видел я её в нем. Но тоже пока найти не могу, где же именно я её видел.
Может быть кто-то помнит, как она выглядит, или может быть есть иные (например, какие-то кроссплатформенные средства) для получения праметра от потока, который бы позволял потоки идентифицировать?
Если найду - выложу.
там в 6 главе
Цитата:
В Windows предусмот рены функции, позволяющие легко ссылаться на объекты ядра текущего процесса и потока:
HANDLE GetCurrentProcess();
HANDLE GetCurrentThread();
Обе эти функции возвращают псевдоописатсль объекта ядра "процесс" или "поток" Они не создают новые описатели в таблице описателей, которая принадлежит вызывающему процессу, и не влияют на счетчики числа пользователей объектов ядра "процесс» и "поток" Поэтому, если вызвать CloseHandle и передать ей псевдоописа тель, она проигнорирует вызов и просто вернет FALSE
Некоторые Windows-функции позволяют указывать конкретный процесс или по ток no его уникальному в рамках всей системы идентификатору. Вот функции, с по мощью которых поток может выяснить такой идентификатор — собственный или своего процесса:
DWORD GetCurrentProcessId();
DWORD GelCurrentThreadId();
По сравнению с функциями, которые возвращают псевдоописатели, эти функции, как правило, не столь полезны, но когда-то и они могут пригодиться.
Теперь у меня такой вопрос. Допустим эта DLL будет использоваться ещё иногда приложениями под Linux, как правильно реализовать универсальное получение уникального идентификатора потока?
Соответственно большинство функционала на вход требовало указатель на стек потока. Моя идея - выкинуть это, скрыв от пользователя. Чтобы когда он дергал функцию - она сама определяла ID потока и понимала, какой ему соответствует стек и подставляла его.
Для винды это шикарно делается через GetCurrentThreadId, но вот как это делается универсально для любой платформы?
Может быть есть какие-то проторенные дорожки? Всё, что приходит в голову - инкапсулировать и дефайном определять, какую часть кода компилить для какой операционки (заодно ещё надо найти аналогичную функцию для unix).
А может быть есть какая-то кроссплатформенная функция определения, что за система используется? Ченить типа все договорились, что такой-то функцией проверяем. Нет? =)