|
|
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Ситуация... Имеется класс 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)' Или этот метод должен быть статическим или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 14:23 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Вы пишете на С или С++ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 14:27 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
в СИ, вообще-то, нет класов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 14:28 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 15:27 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Для C++ обычно нет необходимости использовать указатели на функции. Как правило разработчики используют cвязь через указатель на базовый класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 15:37 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
ну не всегда поможет указатель на базовый класс... Например, когда нужно "жадную" функцию класса запихать в отдельный поток. использую функцию для создания потока AfxBeginThread(<жадная ф-я>,....); причем <жадная ф-я> ::= UINT (* ф-я)(LPVOID) у меня никак не получилось подставить туда указатель на функцию класса, работает только с глобальной функцией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 17:45 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Maktubну не всегда поможет указатель на базовый класс... Например, когда нужно "жадную" функцию класса запихать в отдельный поток. использую функцию для создания потока AfxBeginThread(<жадная ф-я>,....); причем <жадная ф-я> ::= UINT (* ф-я)(LPVOID) Использовать функцию класса в AfxBeginThread никак не получится. AfxBeginThread требует в качестве параметра указатель на функцию с заданным набором аргументов, а любая функция С++ класса CClass, образно говоря, преобразуется компилятором в функцию: ... function(CClass* this, .... ); Maktubработает только с глобальной функцией или статической функцией класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 17:55 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Издержки проектирования ИМХО. Я бы не стал подгонять интерфейс класса к интерфейсу поточной функции. Всегда есть возможность создать враппер. Кстати, в чем заключается жадность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 17:59 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
mayton Кстати, в чем заключается жадность? Я не знаю что такое врапер... Но про жадность могу сказать...это жадная функция, та функция которая долго и муторно что-то вычисляет или к чему-то коннектиться, при этом поглащая ресурсы CPU и прочего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 19:08 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Maktub Но про жадность могу сказать...это жадная функция, та функция которая долго и муторно что-то вычисляет 1) Но если от нее нет отклика длительное время, то вряд-ли его (отклик) можно уменьшить простым отказом от использования вызова виртуального метода. 2) Может попробовать кешировать выходные параметры. 3) Можно организовать буфер, если функция "тяжела на подьем" и имеет длительную инициализацию. 4) Попрофилировать самые тяжелые циклы. Сменить режимы компилляции. Maktub или к чему-то коннектиться, при этом поглащая ресурсы CPU и прочего. Коннекты также поддаются оптимизации. По крайней мере можно уменьшить их количество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2005, 19:23 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
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-запроса произошла блокировка и и запрос завис...=> то же окно будет висеть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 10:54 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 10:58 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
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) Вы не знаете как обрабатывать блокировки базы на стороне клиента. (если я верно понял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 13:18 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
mayton 1) Вы не знаете как вызвать глобальную функцию потока из контекста класса. Нужно...метод класса запихнуть в отдельный поток mayton 2) Вы не знаете как обрабатывать блокировки базы на стороне клиента. о блокировках...это простой пример выполнения длительной операции, не более. Не надо лезть в лес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 14:31 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Maktub mayton 1) Вы не знаете как вызвать глобальную функцию потока из контекста класса. Нужно...метод класса запихнуть в отдельный поток ... Сделайте обертку - обычную функцию, в качестве парметра принимающую указатель на нужный класс. Все что она будет делать - вызывать соответствующий метод класса по указателю (ну и что-нибудь еще... если потребуется). Эту функцию и "засуньте" в поток, передав парметром адрес рабочего объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 15:07 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
(разводя руками) Ну вот! За меня уже ответили. Мне остается только присоединится к мнению redskin-a. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 15:11 |
|
||
|
Указатель на метод класса
|
|||
|---|---|---|---|
|
#18+
Все сделало...вы б сначало посмотрели на вызов функции AfxBeginThread(1,2,...) где 1 - имя гл. функции, 2 - данные, которые будут передаваться вызываемой функции сделано вот таким способом class My{ .... }; гл. функция... UINT MyF(VOID my) { My* self = dynamic_cast<My*>(my); ...тут узаю методы класа } My my1; направление гл.функции в отдельный поток AfxBeginThread(MyF,(LPVOID) my1, ...); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2005, 18:14 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33196866&tid=2032939]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
95ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 460ms |

| 0 / 0 |
