Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
#1

Threads - C++

17.10.2011, 22:10. Просмотров 1413. Ответов 3
Метки нет (Все метки)

Недавно начал изучать многопоточность. Нашёл функцию
C++
1
2
3
4
5
6
7
8
 uintptr_t _beginthreadex( // NATIVE CODE
   void *security,
   unsigned stack_size,
   unsigned ( __stdcall *start_address )( void * ),
   void *arglist,
   unsigned initflag,
   unsigned *thrdaddr 
);
Вроде всё понятно, но возникли вопросы:
1. Точка входа в поток возвращает unsidned. Куда это значение передаётся, то есть как его получить?
2. Последний параметр unsigned *thrdaddr, как я понял, являестся указателем, по которому записывается какой-то id потока. Зачем он нужен? У нас ведь есть уже дескриптор потока, который возвращает _beginthreadex()?
3. Функция _endthreadex(unsigned retval) принимает параметр. Это, как я понял, код выхода из потока. Это то-же самое, что и возвращает функция - точка входа в поток? Зачем он нужен и как его получить извне?

Добавлено через 35 минут
Да, ещё, зачем нужна структура *security? Я её просто устанавливал в 0.

Добавлено через 4 минуты
В MSDN эта структура описана так:
C++
1
2
3
4
5
typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;
}
Когда я стал разбирать её поля, то толком не понял (кроме первого поля - длины). Например, про поле bInheritHandle говорится, что оно отвечает за какое-то наследование дескриптора...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 22:10     Threads
Посмотрите здесь:

C# IO и threads
C++ Two Threads + CriticalSection
boost threads Boost C++
Threads + Timer C#
datagridview and threads C#
C++ Threads. Задача. Написать программу, которая создаёт несколько потоков поиска простых чисел и записи в .txt
Threads and WebClient C#
C++ Threads или как запрограммировать кнопку Старт и Стоп C++
C++ Threads
Сканирование компьютеров на присутствие в сети онлайн. #threads #c++11 #ping #icmp C++
Threads и классы Java SE
C++ В чем ошибка при использовании std::threads

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Revol'veR
23 / 23 / 2
Регистрация: 05.11.2010
Сообщений: 134
17.10.2011, 22:23     Threads #2
Цитата Сообщение от Виктор_Сен Посмотреть сообщение
unsidned.
unsidned и sidned - это модификаторы, они изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.
Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения.
Модификатор типа unsigned указывает, что переменная принимает неотрицательные значения

Соответственно, используем ,unsigned, так как параллелизм добавляется инкрементально, а нити - это вроде как и есть наши перменные(нити, процессы)
PS. Говорю как знаю, только учусь. Приходится гуглить много.
Виктор_Сен
33 / 26 / 1
Регистрация: 01.08.2011
Сообщений: 176
18.10.2011, 14:40  [ТС]     Threads #3
Revol'veR, про unsigned и signed я знаю. В вопросе я имел в виду вот что: в этой строчке "unsigned ( __stdcall *start_address )( void * )" описыввается указатель на функцию, которая возвращает некоторое значение. Его тип в принципе мне не очень важен (он unsigned). Это значит, что где-то в функции должна быть строчка "return x", где x - значение или переменная нужного типа. Так вот, мне интересно, куда после завершения функции "return" оно попадает, то есть как в потоке, который вызвал дочерний поток функцией _beginthreadex, его получить? У меня есть предположение, что это код завершения потока...
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
18.10.2011, 15:03     Threads #4
Конкретно для _beginthreadex в msdn написано отличие от _beginthread:
The routine at start_address passed to _beginthreadex must use the __stdcall calling convention and must return a thread exit code.
Перевести надо?

Добавлено через 8 минут
Кстати, там же написано, что при завершении процедуры _endthreadex вызывается автоматически, так что достаточно будет просто закрыть хэндл
C++
1
CloseHandle(hThread);
Yandex
Объявления
18.10.2011, 15:03     Threads
Ответ Создать тему
Опции темы

Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru