Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как получить указатель на функцию ?  (Прочитано 12043 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 20-10-2004 08:03 » 

САБЖ. Есть класс, в нём какая-то функция, мне нужно получить указатель на эту функцию, для того чтобы я смог использовать её в другом треде.

Подсобите пожалуйста.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Anchorite
Гость
« Ответ #1 : 20-10-2004 08:11 » 

Помоему тебе нужен не указатель на функцию, а указатель на класс, через который ты и вызовешь эту функцию.
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #2 : 20-10-2004 08:22 » 

MOPO3, какая конкретно функция статическая или просто. Просто функцию ты без наличия обекта использовать не сможешь. Статическую пожалста, и указателя не надо.
Код:
class A
{
 static void f()
 {}
};

в проге
A::f();
извини за элементарности Улыбаюсь
« Последнее редактирование: 02-12-2007 15:20 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #3 : 20-10-2004 09:14 » 

Такая ситуёвина (на MFC пишу) :
Код:
class CMyView : public CFormView
{
    CMyView::F1()
    {
        // сдеся запускаем тред
        //AfxBeginThread(..., F3, ...);
    }
    CMyView::F2(param1, param2)
    {
        //тута что то куда то печатаем
    }
    CMyView::F3()
    {
       //тута то что должно выполняться в треде
    }
}
Мне надо из F3() вызвать F2().
Функция не статическая. И не очень хоцеца её прописывать как статическую.
« Последнее редактирование: 02-12-2007 15:26 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Pu
Большой босс

ru
Offline Offline
78


« Ответ #4 : 20-10-2004 09:47 » 

MOPO3, в f3 передай this и делай что хош с ним. при запуске треда можно передать обычно в качестве параметра указатель , а потом его переопределить в нужный тип.
Код:
HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,   // вот сюда вставляешь указатель на обект класса, а в треде его переопределяешь и вызываешь все что душе угодно
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);
« Последнее редактирование: 02-12-2007 15:30 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 20-10-2004 09:55 » 

MOPO3,  и еще одно , f3 - должна по-моему быть статической.
я вообще пользуюсь такой штукой.
Код:
class CMyView : public CFormView 
{
    CMyView::F1()
    {
        // сдеся запускаем тред
        //AfxBeginThread(..., runProcess,(void *)this, ...);
    }
    CMyView::F2(param1, param2)
    {
        //тута что то куда то печатаем
    }
    CMyView::F3()
    {
        F2();
       //тута то что должно выполняться в треде
    }
    static DWORD runProcess(void* Param)
   {
        (CMyView *)Param->F3(Param);
   }
}
« Последнее редактирование: 02-12-2007 15:30 от Алексей1153++ » Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #6 : 20-10-2004 10:07 » 

заяц дело говорит, тока я бы все же это фрагментик бы обернул... не равенчас исправлять прийдется (а ведь точно прийдется на _beginthreadex)
Записан

С уважением Lapulya
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #7 : 20-10-2004 10:42 » new

вот только я бы эту функцию членом класса бы еще не делал, а так вроде все хорошо... эту функцию надо просто в срр файле объявить реаилизовать и юзать тамже (потому как это просто деталь реализации, причем даже не класса, а просто конструкция вызова метода)
Записан

С уважением Lapulya
Pu
Большой босс

ru
Offline Offline
78


« Ответ #8 : 20-10-2004 10:53 » 

lapulya, imho нет особой разницы, она жеж статик Улыбаюсь. Это просто мой стиль, не люблю чтобы чтото выезжало из моих нэймспейсов. Просто она находится в пространстве имен этого класса и не более.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #9 : 20-10-2004 11:10 » 

дело в том, что народ который инклудит этот хеадер, получает впридачу к содственно классу и эту функцию, что с моей точки зрения - недостаток, а если это все скрыть (перенести в срр файл), то об этой функции (и ей подобных) никто и никогда не узнает (и глаза мозолить она не будет) .... и это хорошо!!!
а что касается нейм спейсов  Ага так их можно и в срр прописать (а если это не нравится то отдельный хеадерочек который просто в нужный срр инклудится)
Записан

С уважением Lapulya
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #10 : 20-10-2004 11:12 » 

я имел ввиду не пространство имен класса а namespace
Записан

С уважением Lapulya
Pu
Большой босс

ru
Offline Offline
78


« Ответ #11 : 20-10-2004 11:14 » 

lapulya, а чтоб не получил я ее приватной делаю. А так в принципе согласен с Вами, уважаемый.  8)
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
lapulya
Молодой специалист

ru
Offline Offline

« Ответ #12 : 20-10-2004 11:37 » 

ясно дело, что приватная, но глаз как-то мммм не то чтобы режет, но пищипывает  Ага , хотя это действительно дело вкуса Отлично
Записан

С уважением Lapulya
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines