Здравствуйте. Встала проблема передать в потоковую функцию два указателя на абсолютно несвязанные классы. Мне хочется все эти указатели завернуть в один массив и его уже передать в потоковую функцию, а то писать класс обертку мне кажется очень некрасивым решением. Как это можно сделать? Спасибо
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте. Встала проблема передать в потоковую функцию два указателя на абсолютно несвязанные классы. Мне хочется все эти указатели завернуть в один массив и его уже передать в потоковую функцию, а то писать класс обертку мне кажется очень некрасивым решением. Как это можно сделать? Спасибо
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. Встала проблема передать в потоковую функцию два указателя на абсолютно несвязанные классы. Мне хочется все эти указатели завернуть в один массив и его уже передать в потоковую функцию, а то писать класс обертку мне кажется очень некрасивым решением. Как это можно сделать? Спасибо
Что тебе мешает передевать struct? Я понимаю что по сути тот же class и тем не менее наиболее стандартное решение на мой взгляд.
Нет так не пойдет, ведь у меня функция потоковая и ей нужно передавать параметры, созданные в куче, а не на стеке, а у Вас массив создается на стеке, следовательно, после завершения, функции создания потока, массив будет разрушен. Или я чего не понимаю((
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте. Встала проблема передать в потоковую функцию два указателя на абсолютно несвязанные классы. Мне хочется все эти указатели завернуть в один массив и его уже передать в потоковую функцию, а то писать класс обертку мне кажется очень некрасивым решением. Как это можно сделать? Спасибо
Можно использовать std::pair:
void RunThread() {
std::pair<ObjectA*, ObjectB*> param;
Execute(Run, (void *)¶m);
}
void Run(void* param) {
//Только не забыть param к std::pair<ObjectA*, ObjectB*> привести
ObjectA* a = param->first;
ObjectB* b = param->second;
}
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Laurel, Вы писали:
L>>Здравствуйте, <Аноним>, Вы писали:
А>>>void **params; А>>>ThreadFunc(¶ms);
L>>Не надо &. L>>
А>Так для потоковой функции LPVOID в качестве параметра передается, а это же void *. Или я не прав
Правы правы. Используйте std::pair. Код будет проще и понятнее.
Re[9]: Один указатель на два указателя
От:
Аноним
Дата:
22.12.04 08:07
Оценка:
А>>Так для потоковой функции LPVOID в качестве параметра передается, а это же void *. Или я не прав
Z>Правы правы. Используйте std::pair. Код будет проще и понятнее.
STL я знаю плохо, если не сложно можно пример Спасибо
Здравствуйте, zcbh, Вы писали:
А>>Так для потоковой функции LPVOID в качестве параметра передается, а это же void *. Или я не прав Z>Правы правы. Используйте std::pair. Код будет проще и понятнее.
Трус не играет в хоккей.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re[9]: Один указатель на два указателя
От:
Аноним
Дата:
22.12.04 08:27
Оценка:
Здравствуйте, Laurel, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
L>>>
Здравствуйте, Аноним, Вы писали:
А>>>Так для потоковой функции LPVOID в качестве параметра передается, а это же void *. Или я не прав
Z>>Правы правы. Используйте std::pair. Код будет проще и понятнее.
А>STL я знаю плохо, если не сложно можно пример Спасибо
ОК. Пример:
Есть у нас 2 объекта, допустим
ObjectA objectA;
ObjectB objectB;
Мы хотим передать указатели на них в метод, который будет запускаться в отдельном потоке.
Этот метод принимает в качестве параметра только указатель на void.
void RunThread() {
std::pair<ObjectA*, ObjectB*> param(&objectA, &objectB); // Создаем объект param, который хранит как раз 2 указателя
Execute(Run, (void *)¶m); // Передаем указатель на param
}
// Это та самая ThreadFuncvoid Run(void* param) {
//Только не забыть param к указателю на std::pair<ObjectA*, ObjectB*> привести
ObjectA* a = (std::pair<ObjectA*, ObjectB*>*)param->first;
ObjectB* b = (std::pair<ObjectA*, ObjectB*>*)param->second;
// Имеет указатели на исходные объекты
}
Метод first возвращает перый объект хранящийся в паре (т.е. указатель на ObjectA), second соответственно второй.
В std::pair можно засунуть пару любых объектов, например: