CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум C++

Ответ Создать новую тему
 
Старый 27.12.2011, 09:51   #1
kravam
быдлокодер
 
Аватар для kravam
 
Регистрация: 04.06.2008
Сообщений: 2,763
Репутация: 1064 (563)
По умолчанию Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)

Да, как?
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
 
void *BusyWork(void *t) {
   printf("TID= %x\n", pthread_self());
   printf("TID= %x\n", (unsigned int)GetCurrentThreadId ());
   return NULL;
}
 
int main () {
 pthread_t thread;
 pthread_create(&thread, NULL, BusyWork, NULL); 
 getchar ();
}
 
ВЫвод:
Код C++
1
2
3
TID= 1
TID= df0
 
Компилятор g++, версия 4.6.1, сборка niXmana, pthread_t определён как:
Код C++
1
2
3
typedef unsigned int uintptr_t;
typedef uintptr_t pthread_t;
 
//////////////////////////////////////////////////////////////////////////////////////////////////

Меж тем других версия g++, в частности, 4.5.0, pthread_t был определён так:

Код C++
1
2
3
4
5
6
7
typedef struct {
    void * p;                   /* Pointer to actual object */
    unsigned int x;             /* Extra information - reuse count etc */
} ptw32_handle_t;
 
typedef ptw32_handle_t pthread_t;
 

ПОлучение TID потока, сводилось таким обраом, к:
Код C++
1
2
3
4
   pthread_t pthread_t_ = pthread_self();
unsigned int TID= *(unsigned int*)(pthread_t_.p);
   printf("TID= %x\n", (unsigned int)TID);
 
И всё было круто. Может мне кто-нибудь ответить, как используя pthread_self() компилятора 4.6.1 получить TID потока?

Добавлено через 17 часов 32 минуты
niXman, я сделал так, открыл \i686-pc-mingw32\include, заккоментил
Код C++
1
2
//pthread_t WINPTHREAD_API pthread_self(void);
 
написал:
Код C++
1
2
#include <windows.h>
#define pthread_self (pthread_t)GetCurrentThreadId
Код:
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
 
void *BusyWork(void *t) {
   pthread_t pthread_t_= pthread_self();
   printf("TID= %x\n", pthread_t_);
   printf("TID= %x\n", pthread_self());
   printf("TID= %x\n", (unsigned int)GetCurrentThreadId ());
   return NULL;
}
 
int main () {
 pthread_t thread;
 pthread_create(&thread, NULL, BusyWork, NULL); 
 getchar ();
}
 

ВЫвод:
Код Bash
1
2
3
4
TID= be0
TID= be0
TID= be0
 
Но хотелось бы всё-таки услышать мнение знающих людей, а то какие ещё сюрпризы меня поджидают?
kravam вне форума
Другие темы раздела
Совместимость кода Code Composer Studio (CCS) с C/C++
С преподавателем друг друга не поняли. Как результат, прихожу с честно сделанными в Паскале лабами под занавес года, а он мне встречный подарок: "раз ты так редко ходишь, то почему не сделал лабы в CCS?". В общем логика железная. Пошел гуглить что это за CCS. А вся группа вовсе не делала этих лаб,.... Совместимость кода Code Composer Studio (CCS) с C/C++
Excel Automation in C++
Коллеги, прошу помощи! Нужен пример рабочего С++ кода, который делает следущее: - конектится к работающему в настоящий момент Excel; если Excel не запущен, то кидает exception; - конектится к текущему worksheet; если worksheet отсутствует, то кидает exception; - если все приконектилось.... Excel Automation in C++
Старый 25.01.2012, 13:36   #51
niXman
Форумчанин
Эксперт C++
 
Аватар для niXman
 
Регистрация: 09.08.2009
Сообщений: 3,043
Репутация: 2079 (1108)
По умолчанию Re: Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)

kravam, скажи, русский - не родной для тебя язык? ибо повторюсь: я большую часть твоих постов не понимаю.


Цитата Сообщение от kravam Посмотреть сообщение
эта штука есть у тебя или нет
какая "штука" ? std::thread::id ? если да - то почему "у меня"? STL не я пишу.

Цитата Сообщение от kravam Посмотреть сообщение
где можно найти документацию по продукту, как не у разработчиков? Вот я искал у тебя на сайте.
так я не разработчик. я всего лишь выполняю сборки GCC для вендус. разработчики тут: gcc.gnu.org

Цитата Сообщение от kravam Посмотреть сообщение
И я помню, что на у тебя на сайте есть. Но неполная.
ты про это?
так это не документация. это просто вводная статья.
niXman вне форума
Старый 25.01.2012, 15:08  [ТС]   #52
kravam
быдлокодер
 
Аватар для kravam
 
Регистрация: 04.06.2008
Сообщений: 2,763
Репутация: 1064 (563)
По умолчанию Re: Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)

НУ я не знаю как это правильно назвать:
std::thread

То ли это пространство имён, то ли библиотека то ли ещё что. И да, документацию по ней я видел у тебя на сайте:
http://code.google.com/p/mingw-builds/downloads/list

Где-то здесь. Щас я искал но не смог найти. Ну раз она мне показалась неполной, решил поикать что-нибудь другое.
kravam вне форума
Старый 25.01.2012, 15:40   #53
niXman
Форумчанин
Эксперт C++
 
Аватар для niXman
 
Регистрация: 09.08.2009
Сообщений: 3,043
Репутация: 2079 (1108)
По умолчанию Re: Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)

Цитата Сообщение от kravam Посмотреть сообщение
И да, документацию по ней я видел у тебя на сайте:
http://code.google.com/p/mingw-builds/downloads/list
там ее никогда не было. увидеть ты ее мог тут.
niXman вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 25.01.2012, 15:48  [ТС]   #54
kravam
быдлокодер
 
Аватар для kravam
 
Регистрация: 04.06.2008
Сообщений: 2,763
Репутация: 1064 (563)
По умолчанию Re: Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу)

Ну короче факт остаётся фактом, я её у тебя но не нашёл и принялся искать другой инструмент.
kravam вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
C++ Как узнать, что поток закончился (библиотека pthread)?
Друзья! Есть ли какая-нибудь pthread-функция, которая вызывается в основном потоке X и показывает- да, созданный ранее поток Y закончился? Так-то можно в принципе сделать так: передавать в функцию потока Y параметром указатель на какой-нибудь флаг, и если поток Y заканчивается корректно, то он...
kravam
С++ для начинающих вытянуть значение HINSTENCE из текущего потока
Доброго времени суток! Подскажите как можно вытянуть значение HINSTENCE из текущего потока. Может есть какая функция. Т.е. хочу в принципе в любом месте кода уметь получить hInst, чтобы не тягать это значение из WinMain.
FireNovel
Win API HINSTENCE из текущего потока
Доброго времени суток! Подскажите как можно вытянуть значение HINSTENCE из текущего потока. Может есть какая функция. Т.е. хочу в принципе в любом месте кода уметь получить hInst, чтобы не тягать это значение из WinMain.
FireNovel
С++ для начинающих как определить размер стека потока (имеется специальная функция, библиотека pthread)
Друзья! Какой день воюю со стандартом POSIX Итак, надо получить размер стека потока. Тупо. 1)Для этого существует функция pthread_attr_getstacksize (&attr, &stacksize); КАзалось бы чего проще, применяй её и получай в переменой stacksize размер потока. Но ни хрена подобного. Оказывается,...
kravam
С под Linux создание потока. linux. pthread.
нужно создать много нитей. Не хочет создавать более 382 потоков. на 383ем возвращает 12 = ENOMEM = out of memory Проблемма: нужно создать значительно большее кол-во потоков. Вопрос: out of какой memory. RAM ещё хватает с головой. gcc-4.2.4 linux-2.6.27.8 запускал на разных машинах и...
prestigio
Опции темы

Текущее время: 01:05. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru Яндекс.Метрика