Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > pthread_create(&p,NULL,run,func_pointer) |
Автор: zaytsewa 9.4.2009, 14:18 | ||
хочется передать в функцию run в качестве параметра указатель на другую функцию (другого класса) реально ли это сделать?? в ф-ции run func_pointer не воспринимается как указатель на функцию((
|
Автор: azesmcar 9.4.2009, 15:54 | ||||||
да
ну ясное дело ![]() дам пример, а там разберешся думаю
zaytsewa а вообще некоторые указатели на функции могут занимать больше памяти чем может содержать void*, так что лучше передавай указатель на указатель или заверни в структуру. |
Автор: X-3R1 10.4.2009, 10:24 | ||||
Я заметил:
где run:
Но ведь pthread_create ожидает функции void (*func)(void*), а не void (T::*func)(void*). Разве это скомпиллируется ? И ещё такой вопрос, как работать с сишными API которые ожидают указатель на функцию (signal, pthread_create etc) в ООП. Как-нибудь можно стандартными средствами языка C++ передать такой функции указатель на метод класса, а не указатель на статический метод или глобальную функцию ? Вроде бы знаю что boost::bind нечто подобное умеет. |
Автор: azesmcar 10.4.2009, 10:40 |
X-3R1 если функция статическая - сработает Добавлено через 1 минуту и 4 секунды X-3R1 можно сделать статическую и передавать ей this. А из нее вызывать соответствующую мембер функцию |
Автор: X-3R1 10.4.2009, 11:39 | ||||
можно =)))
да ты прав =) Уже написал враппер:
|
Автор: azesmcar 10.4.2009, 11:46 | ||
X-3R1
нет ![]() то что я написал это обходное решение того что тебе нужно. А передать мембер функцию как ThreadProc - нельзя. |
Автор: X-3R1 10.4.2009, 11:51 | ||||
Это уже не важно, главное что теперь:
работает. И wrap_func не обязательно делать глобальной функцией или статическим методом. |