Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176

Threads

17.10.2011, 22:10. Показов 2377. Ответов 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 говорится, что оно отвечает за какое-то наследование дескриптора...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.10.2011, 22:10
Ответы с готовыми решениями:

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

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

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

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

Соответственно, используем ,unsigned, так как параллелизм добавляется инкрементально, а нити - это вроде как и есть наши перменные(нити, процессы)
PS. Говорю как знаю, только учусь. Приходится гуглить много.
0
 Аватар для Виктор_Сен
36 / 29 / 2
Регистрация: 01.08.2011
Сообщений: 176
18.10.2011, 14:40  [ТС]
Revol'veR, про unsigned и signed я знаю. В вопросе я имел в виду вот что: в этой строчке "unsigned ( __stdcall *start_address )( void * )" описыввается указатель на функцию, которая возвращает некоторое значение. Его тип в принципе мне не очень важен (он unsigned). Это значит, что где-то в функции должна быть строчка "return x", где x - значение или переменная нужного типа. Так вот, мне интересно, куда после завершения функции "return" оно попадает, то есть как в потоке, который вызвал дочерний поток функцией _beginthreadex, его получить? У меня есть предположение, что это код завершения потока...
0
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
18.10.2011, 15:03
Конкретно для _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);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2011, 15:03
Помогаю со студенческими работами здесь

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

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

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

В каких случаях удобнее использовать processes , в каких удобнее threads?
Привет! Экзаменационный вопрос: show a real case example in which you would choose processes, and another in which you would choose...

Threads
Доброго времени суток. Возможно ли реализовать многопоточное консольное приложение, при этом количество потоков задать после после запуска?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru