Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатель на метод класса / 19 сообщений из 19, страница 1 из 1
01.08.2005, 14:23
    #33194436
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Ситуация...
Имеется класс
class My {
public:
UINT open(LPVOID);
};


Как создать указатель на метод open???

My my;

UINT (*f)(LPVOID) = my.open;
// error C2440: 'initializing' : cannot convert from 'overloaded-function' to 'UINT (__cdecl *)(LPVOID)'


Или этот метод должен быть статическим или как?
...
Рейтинг: 0 / 0
01.08.2005, 14:27
    #33194447
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Вы пишете на С или С++ ?
...
Рейтинг: 0 / 0
01.08.2005, 14:27
    #33194448
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
С++
...
Рейтинг: 0 / 0
01.08.2005, 14:28
    #33194451
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
в СИ, вообще-то, нет класов.
...
Рейтинг: 0 / 0
01.08.2005, 15:27
    #33194596
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <iostream> 

using namespace std;

class C
{
public :
	void f(int n ) 
		{cout << "C::f(). this =  " << this <<  " n = " << n  << endl; };
};

int main(int argc, char *argv[])
{
	C c1, c2;
	void (C::*p)(int) = &C::f;
	
	(c1.*p)( 15 );
	(c2.*p)( 10 );
		
	return  0 ;
}

...
Рейтинг: 0 / 0
01.08.2005, 15:37
    #33194623
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Для C++ обычно нет необходимости использовать указатели
на функции. Как правило разработчики используют cвязь через
указатель на базовый класс.
...
Рейтинг: 0 / 0
01.08.2005, 17:45
    #33194972
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
ну не всегда поможет указатель на базовый класс...
Например, когда нужно "жадную" функцию класса запихать в отдельный поток.

использую функцию для создания потока
AfxBeginThread(<жадная ф-я>,....);

причем
<жадная ф-я> ::= UINT (* ф-я)(LPVOID)

у меня никак не получилось подставить туда указатель на функцию класса,
работает только с глобальной функцией
...
Рейтинг: 0 / 0
01.08.2005, 17:55
    #33195002
SeraTJ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Maktubну не всегда поможет указатель на базовый класс...
Например, когда нужно "жадную" функцию класса запихать в отдельный поток.

использую функцию для создания потока
AfxBeginThread(<жадная ф-я>,....);

причем
<жадная ф-я> ::= UINT (* ф-я)(LPVOID)

Использовать функцию класса в AfxBeginThread никак не получится. AfxBeginThread требует в качестве параметра указатель на функцию с заданным набором аргументов, а любая функция С++ класса CClass, образно говоря, преобразуется компилятором в функцию:
... function(CClass* this, .... );


Maktubработает только с глобальной функцией
или статической функцией класса.
...
Рейтинг: 0 / 0
01.08.2005, 17:59
    #33195014
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Издержки проектирования ИМХО. Я бы не стал
подгонять интерфейс класса к интерфейсу
поточной функции. Всегда есть возможность
создать враппер.

Кстати, в чем заключается жадность?
...
Рейтинг: 0 / 0
01.08.2005, 19:08
    #33195147
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
mayton
Кстати, в чем заключается жадность?

Я не знаю что такое врапер...
Но про жадность могу сказать...это жадная функция, та функция которая долго и муторно что-то вычисляет или к чему-то коннектиться, при этом поглащая ресурсы CPU и прочего.
...
Рейтинг: 0 / 0
01.08.2005, 19:23
    #33195166
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Maktub
Но про жадность могу сказать...это жадная функция, та функция которая долго и муторно что-то вычисляет


1) Но если от нее нет отклика длительное время, то
вряд-ли его (отклик) можно уменьшить простым
отказом от использования вызова виртуального
метода.

2) Может попробовать кешировать выходные
параметры.

3) Можно организовать буфер, если функция
"тяжела на подьем" и имеет длительную инициализацию.

4) Попрофилировать самые тяжелые циклы. Сменить
режимы компилляции.

Maktub
или к чему-то коннектиться, при этом поглащая ресурсы CPU и прочего.


Коннекты также поддаются оптимизации. По крайней
мере можно уменьшить их количество.
...
Рейтинг: 0 / 0
02.08.2005, 10:54
    #33195838
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
mayton
про твои 1) 2) 3) 4)

выполни цикл
for (int i = 0;i<100000;i++)
for (int j = 0;i<100000;i++)
for (int k = 0;i<100000;i++)
{обработка масива данных}

и посмотри что будет с твоим окном.


[quot mayton]
Коннекты также поддаются оптимизации. По крайней
мере можно уменьшить их количество.


пример: функция вызывает хранимую процедуру БД, которая возвращает тысячи строк...или при выполнении sql-запроса произошла блокировка и и запрос завис...=> то же окно будет висеть
...
Рейтинг: 0 / 0
02.08.2005, 10:58
    #33195849
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
maytonfor (int i = 0;i<100000;i++)
for (int j = 0; i <100000; i ++)
for (int k = 0; i <100000; i ++)

Прикольный цикл
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
02.08.2005, 13:18
    #33196388
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Maktub
выполни цикл
for (int i = 0;i<100000;i++)
for (int j = 0;i<100000;i++)
for (int k = 0;i<100000;i++)
{обработка масива данных}


Чем дальше в лес... тем толще партизаны .
Работа с БД значит. Странно выглядит. Хм.. больше
похоже на численный метод.

Попробую вернутся к началу обсуждения. Вы говорите
[quot Maktub]
ну не всегда поможет указатель на базовый класс...
Например, когда нужно "жадную" функцию класса запихать в отдельный поток.

использую функцию для создания потока
AfxBeginThread(<жадная ф-я>,....);

причем
<жадная ф-я> ::= UINT (* ф-я)(LPVOID)

у меня никак не получилось подставить туда указатель на функцию класса,
работает только с глобальной функцией
[/Maktub]

Значит проблема заключается в том, что

1) Вы не знаете как вызвать глобальную функцию потока из контекста класса.
2) Вы не знаете как обрабатывать блокировки базы на стороне клиента.

(если я верно понял)
...
Рейтинг: 0 / 0
02.08.2005, 14:31
    #33196667
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
mayton
1) Вы не знаете как вызвать глобальную функцию потока из контекста класса.


Нужно...метод класса запихнуть в отдельный поток

mayton
2) Вы не знаете как обрабатывать блокировки базы на стороне клиента.


о блокировках...это простой пример выполнения длительной операции, не более.

Не надо лезть в лес.
...
Рейтинг: 0 / 0
02.08.2005, 15:07
    #33196866
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Maktub mayton
1) Вы не знаете как вызвать глобальную функцию потока из контекста класса.


Нужно...метод класса запихнуть в отдельный поток
...


Сделайте обертку - обычную функцию, в качестве парметра принимающую указатель на нужный класс. Все что она будет делать - вызывать соответствующий метод класса по указателю (ну и что-нибудь еще... если потребуется). Эту функцию и "засуньте" в поток, передав парметром адрес рабочего объекта.
...
Рейтинг: 0 / 0
02.08.2005, 15:11
    #33196878
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
(разводя руками) Ну вот! За меня уже ответили.
Мне остается только присоединится к мнению redskin-a.
...
Рейтинг: 0 / 0
02.08.2005, 18:14
    #33197608
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
Все сделало...вы б сначало посмотрели на вызов функции AfxBeginThread(1,2,...)

где 1 - имя гл. функции,
2 - данные, которые будут передаваться вызываемой функции

сделано вот таким способом

class My{
....
};

гл. функция...
UINT MyF(VOID my)
{
My* self = dynamic_cast<My*>(my);
...тут узаю методы класа
}

My my1;

направление гл.функции в отдельный поток
AfxBeginThread(MyF,(LPVOID) my1, ...);
...
Рейтинг: 0 / 0
02.08.2005, 18:16
    #33197615
Maktub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Указатель на метод класса
короче...разговор ни о чем получился
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Указатель на метод класса / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]