Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметров потоку, при его создании 
:(
    Опции темы
4eJIoBekMoJIekyJIa
Дата 30.4.2008, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Такая проблема, мне нужно передать в поток переменную типа vector<MyStruct> где например MyStruct объявляеться как
Код

struct MyStruct
{
    int val;
}

насколько я знаю в функцию потока нужно передавать переменную тип (void*), что нужно сделать, чтобы, потом внутри этой функции, преобразовать переменную обратно в vector<MyStruct>?
--------------------
PM MAIL   Вверх
t_gran
Дата 30.4.2008, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: нет
Всего: 37



4eJIoBekMoJIekyJIa, а по твоему void * это что такое? smile
Для справки:  void * - указатель на не определённый тип, а значит работать будет с теми данными (такого типа), которые ты передашь. smile

Добавлено через 5 минут и 41 секунду
Кстати здесь эта проблема как раз и обсуждается. smile


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
MAKCim
Дата 30.4.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  30.4.2008,  03:22 Найти цитируемый пост)
что нужно сделать, чтобы, потом внутри этой функции, преобразовать переменную обратно в vector<MyStruct>?

Код

static void * thread_routine(void * argument) {
    vector<MyStruct> & vec = static_cast<vector<MyStruct>&>(*static_cast<vector<MyStruct>*>(argument));
}



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 30.4.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim, 
А просто (vector<MyStruct> *) 
не прокатит ?


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 30.4.2008, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(GrayCardinal @  30.4.2008,  09:00 Найти цитируемый пост)
А просто (vector<MyStruct> *) 
не прокатит ? 

тут как бы С++  smile 
оно прокатит, но при использовании С++ лучше использовать конструкции С++
имхо

Это сообщение отредактировал(а) MAKCim - 30.4.2008, 09:31


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 30.4.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



MAKCim, 
Согласен.
Надо учиться конструкциям Си++ smile smile 


--------------------
PM MAIL WWW   Вверх
JackYF
Дата 30.4.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



MAKCim, первый из static_cast'ов не нужен smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MAKCim
Дата 30.4.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



JackYF,
в С++ автоматическое преобразование void* -> T* без предупреждений возможно?
по-моему это только в С 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
4eJIoBekMoJIekyJIa
Дата 30.4.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



MAKCim,
а можно написать без & ?
Код

 vector<MyStruct> vec = static_cast<vector<MyStruct>>(*static_cast<vector<MyStruct>*>(argument));

--------------------
PM MAIL   Вверх
JackYF
Дата 30.4.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(MAKCim @  30.4.2008,  12:46 Найти цитируемый пост)
в С++ автоматическое преобразование void* -> T* без предупреждений возможно?
по-моему это только в С 

Блин. Я имел в виду:

Код

static void * thread_routine(void * argument) {
    vector<MyStruct> & vec = *static_cast<vector<MyStruct>*>(argument);
}



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
4eJIoBekMoJIekyJIa
Дата 30.4.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 2.11.2007

Репутация: нет
Всего: нет



Слушайте насчет vector, у меня есть программа
Код

int main()
{
    vector<int> vec;
    for(int i = 0; i < num; i++)
        vec.push_back(i);
    cout<<vec.capacity() << endl;
    return 0;
}

если num =2 - выводит 2, если num =3 - выводит 4, если num =4 - выводит 4, если num =5 - выводит 8. 
Он что при нехватке памяти удваивает ее?
И еще, как нибудь можно получить количество элементов списка, или тока самому пересчитывать?

Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 30.4.2008, 16:31
--------------------
PM MAIL   Вверх
MAKCim
Дата 30.4.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(4eJIoBekMoJIekyJIa @  30.4.2008,  15:27 Найти цитируемый пост)
Он что при нехватке памяти удваивает ее?

в общем случае implementation-specific
в данном случае да
Цитата(4eJIoBekMoJIekyJIa @  30.4.2008,  15:27 Найти цитируемый пост)
И еще, как нибудь можно получить количество элементов списка, или тока самому пересчитывать?

vec.size() не катит?

4eJIoBekMoJIekyJIa, 

M
MAKCim
Модератор: Вопросы по С++ задавайте в соседних форумах!


Добавлено через 26 секунд
Цитата(JackYF @  30.4.2008,  14:36 Найти цитируемый пост)
Блин. Я имел в виду:

ну да  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.