С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

как определить размер стека потока (имеется специальная функция, библиотека pthread) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Помогите с блочной сортировкой http://www.cyberforum.ru/cpp-beginners/thread372046.html
блочную сортировку задали, но задали не просто а с указателями и т.п т .д ,вроде по алгоритму все, не могу понять почему выбивает. Подскажите пожалуйста #include <iostream> #include <iomanip>...
C++ Возобновление потока cin. Всем привет =) С недавних пор изучаю С++, и вот однажды, во время выполнения одного из заданий из учебника Страуструпа, наткнулся я на такое вот западло :): vector<int> v; int n = 0, sum = 0,... http://www.cyberforum.ru/cpp-beginners/thread372042.html
Пересчет размера обуви в размер ноги в дюймах C++
1.Написать программу, которая будет производить пересчет размера обуви в размер ноги в дюймах (попробуйте сделать эту программу и с использованием автоувеличения). 2.Составить программу, которая...
Работа с классами. Нужна помощь с функцией C++
Всем добрый вечер! Вот задание: Разработать класс содержащий: - компоненты данные - методы: а) конструктор по умолчанию; б) конструктор с параметрами; в) конструктор копирования; г)...
C++ Перегрузка оператора - для нахождения целого числа http://www.cyberforum.ru/cpp-beginners/thread371998.html
Необходимо перегрузить операцию вычисления количества дней между датами («дата» – «дата»). помогите дописать саму перегрузку оператора пожалуйста #include<iostream> #include<conio.h> using...
C++ Динамический список( Realloc, malloc, calloc) Здравствуйте! Надо написать программу которая 1) прочтет с клавиатуры длину поле N, 2)прочтет N чисел типа double а вложит их до поля, 3) найдет максимум а минимум из чисел 4) выпишет позицию и... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489

как определить размер стека потока (имеется специальная функция, библиотека pthread) - C++

25.10.2011, 10:24. Просмотров 2581. Ответов 0
Метки (Все метки)

Друзья! Какой день воюю со стандартом POSIX
Итак, надо получить размер стека потока. Тупо.

1)Для этого существует функция
C++
1
pthread_attr_getstacksize (&attr, &stacksize);
КАзалось бы чего проще, применяй её и получай в переменой stacksize размер потока. Но ни хрена подобного. Оказывается, для того,чтобы корректно применить pthread_attr_getstacksize, надо
2) инициализировать переменную attr. Вот так:
C++
1
pthread_attr_init(&attr);
Тьфу. А чтобы иницииализировать
3) attr её нужно объявить.
C++
1
pthread_attr_t attr;
Три лишних строчки получаем- объявление переменной, инициализация и получение размера стека. И если вы думаете, что на этом всё, вы ошибаетесь. Тут я вообще ничё не понимаю. Щас по идее надо устанавливать размер стека- иначе он равный 0! Вот так надо:
C++
1
pthread_attr_setstacksize (&attr, stacksize);
Но, во-первых, получается херь какая-то- я сам устанавливаю размер стека, с тем, чтобы его получить. Гениально. А во вторых, и это главное, поток спокойно выполняется с размером стека равным 0. Это выше моего понимания.

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Но мы можем объявить поток безо всякой переменной attr! И тогда там создастя стек с размером ПО УМОЛЧАНИЮ! Как его найти? Покрыто мраком всё. А вот простой корректный код и как найти размер стека без того, чтобы самому НЕ ОБЪЯВЛЯТЬ ЕГО- я ума не приложу. Меж тем код работает, стек то есть существует.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <windows.h>
#include <pthread.h>
#include <stdio.h>
 
 
//Функция потока 
void *dowork(void *threadid){
 int array [10]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
 int i,j;
 for (int i= 0; i< 100; i++) {
  printf ("i= %d\n", i);
 }
}
 
int main(int argc, char *argv[]){
 
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
   pthread_t threads;
   size_t stacksize;
 
 
 
//Колроче все эти строчки коту под хвост, если раскомментим, получаем размер стека 0. 
//Меж тем поток нормально выполняется
//   pthread_attr_t attr;
//   pthread_attr_init(&attr);
//   pthread_attr_getstacksize (&attr, &stacksize);
//  printf("Default stack size = %x\n", stacksize);
 
 
//А вот то о чём я говорил- не полные же мы кретины, чтобы работать с нулевым стеком!
//устанавливаем размер... САми ищем, сами и устанавливаем... 
//   pthread_attr_setstacksize (&attr, &stacksize);
 
 
//   pthread_create(&threads, &attr, dowork, NULL);
 
   //Вот простое корректное создание потока. Но определение размера стека в этом 
   //случае покрыто мраком!!!!!!
   pthread_create(&threads, NULL, dowork, NULL);
 
   getchar ();
}
Спасибо, кто откликнется

Добавлено через 9 часов 12 минут
подымаю тему в связи с большой общественной значимостью.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.