Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
#1

Аргумент функции - указатель на метод класса - C++

14.11.2013, 00:54. Просмотров 419. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Содержание задания - написать программу, создающую копию выбранного пользователем файла при помощи n-го кол-ва потоков (среда разработки "VS 2012").
Написание программы процедурным методом не вызвало ни каких трудностей. Но вот при написании её же при помощи классов... Суть вопроса в том, что при попытке передать метод класса в виде одного из аргументов в ф-цию CreateThread() - генерирует ошибку (вот ссылка на эту ошибку http://msdn.microsoft.com/ru-ru/libr...v=vs.120).aspx ).
Подскажите, пожалуйста, как справиться с моей "заминкой".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Threed{
private:
....
public:
DWORD  WINAPI copyFile(); //вот этот метод
void inThreed()
...
};
 
DWORD WINAPI Threed::copyFile() { 
... 
}
 
...
 
void Threed::inThreed() {
    hThreadsArray[step] = CreateThread(NULL,NULL, this->copyFile, NULL, NULL, NULL);
}
Заранее благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2013, 00:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аргумент функции - указатель на метод класса (C++):

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Указатель массива как аргумент функции - C++
Я прочитал несколько алгоритмов сортировки массивов, но не совсем понял, если массив чисел будет передан в аргумент функции через...

Указатель на функцию с аргументами, как аргумент другой функции - C++
У меня есть некая функция, которая принимает как аргумент другую функцию typedef void(*func_type)(); start(func_type...

Указатель на метод класса - C++
Есть для этого какой-нибудь инструмент? Интересует именно не ссылка, а указатель. Хочется примерно следующего: typedef...

Указатель на метод класса! - C++
Ответьте пожалуйста на такой вопрос:Возможна ли такая ситуация и как ее реализовать правильно? Мне надо использовать функцию(void...

8
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,639
Записей в блоге: 3
Завершенные тесты: 1
14.11.2013, 01:08 #2
Можете сделать её статической.
1
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
14.11.2013, 01:14  [ТС] #3
Ок. Попробую.
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,639
Записей в блоге: 3
Завершенные тесты: 1
14.11.2013, 01:16 #4
У функций членов есть же неявный параметр, у статических его нет.
Но естественно, что у статических функций нет привязки к объекту
1
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
14.11.2013, 09:02  [ТС] #5
Но сделав этот метод статическим - я "потерял" доступ к не статическим полям класса (т.е. то, о чем Вы и говорили).
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
14.11.2013, 10:37 #6
Для этого существует параметр потока.
C++
1
2
3
4
5
6
7
8
static DWORD WINAPI Threed::copyFile( LPVOID lpParam ) { 
    Threed * p_thread = (Threed *)lpParam;
    p_thread->член_или_метод класса
}
 
void Threed::inThreed() {
    hThreadsArray[step] = CreateThread(NULL,NULL, this->copyFile, (LPVOID)this, NULL, NULL);
}
1
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
14.11.2013, 14:35 #7
castaway, Я конечно может чего-то не понимаю... Но с чего вдруг this->copyFile?
C++
1
hThreadsArray[step] = CreateThread(NULL,NULL, &Threed::copyFile, (LPVOID)this, NULL, NULL);
1
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
14.11.2013, 15:06 #8
ForEveR, да, он тут конечно не нужен. Просто я скопировал код из 1-го поста. Тут можно просто указать copyFile.
1
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.11.2013, 00:13  [ТС] #9
Спасибо, Друзья!
Рабочий вариант:
C++
1
2
3
4
5
6
7
8
static DWORD WINAPI Threed::copyFile( LPVOID lpParam ) { 
    Threed * p_thread = (Threed *)lpParam;
    p_thread->член_или_метод класса
}
 
...
 
hThreadsArray[step] = CreateThread(NULL,NULL, &Threed::copyFile, (LPVOID)this, NULL, NULL);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2013, 00:13
Привет! Вот еще темы с ответами:

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

Указатель на метод класса - C++
Как сделать указатель на метод класса А, который наследует класс В в классе В. class A : B { public: double...

Указатель на метод класса - C++
Приветствую. Нужна помощь. Не работает указатель в данной программе: #include <iostream> #include <string.h> using namespace std; ...

Указатель на метод класса - C++
Собственно, проблема вот в чем. Есть класс и для него определен метод class ABC ....... public: void paint(.....); ...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
16.11.2013, 00:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru