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

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

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

Threads - C++

17.10.2011, 22:10. Просмотров 1422. Ответов 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
Посмотрите здесь:

Threads - C++
Есть массив потоков в количестве 10 и есть функция, которую надлежит выполнить 50 раз, как этими 10-ю потоками выполнить её 50 раз?

Two Threads + CriticalSection - C++
код... #include <stdio.h> #include <stdlib.h> #define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT 0x0500 #include <windows.h> ...

В чем ошибка при использовании std::threads - C++
Добрый день! Упражняюсь в std::threads, написал вот такую-вот программку. Выдает ошибку: error C2280: "std::mutex::mutex(const...

C++ Threads или как запрограммировать кнопку Старт и Стоп - C++
Погуглил нечего не нашёл на эту тему..

Сканирование компьютеров на присутствие в сети онлайн. #threads #c++11 #ping #icmp - C++
Пишу программу, которая будет проверять наличие компьютеров в сети. Нашел на msdn код для отправки ICMP запроса. Пытаюсь использовать этот...

Threads. Задача. Написать программу, которая создаёт несколько потоков поиска простых чисел и записи в .txt - C++
Добрый день. Начал изучать потоки и програмить с помощью C++. Дали задание - Написать программу, которая создаёт несколько потоков поиска...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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, его получить? У меня есть предположение, что это код завершения потока...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2011, 15:03     Threads
Еще ссылки по теме:

IO и threads - C#
Посоветуйте плиз, что делать! возникает ошибка когда разные нитки пишут в один файл. "Probable IO race condition detected". вывел...

boost threads - Boost C++
#include <iostream> #include <boost/thread/thread.hpp> void hello_world() { std::cout << "Hello world, I'm a thread!" <<...

Threads и классы - Java SE
Есть вопрос. Как известно создавая класс с интерфейсом Runnable мы потом можем добавить его в класс потока. А вот как узнать какой класс...

datagridview and threads - C#
В общем такая беда, хочу что бы данные брались из таблицы и передавались в качестве аргумента в новый поток и суть в том что в таблице...

Threads and WebClient - C#
НЕ могу понять одну вещь, почему при асинхронном скачивании и многопоточности, качается по два файла за раз, хотя должно, как мне кажется,...

Threads + Timer - C#
у меня стоит задача выполнять какие-то действия в нескольких потока с какой-то периодичностью весь код я свел просто к модели дабы не...


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

Или воспользуйтесь поиском по форуму:
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,345
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
Ответ Создать тему
Опции темы

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