MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« : 20-10-2004 08:03 » |
|
САБЖ. Есть класс, в нём какая-то функция, мне нужно получить указатель на эту функцию, для того чтобы я смог использовать её в другом треде.
Подсобите пожалуйста.
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Anchorite
Гость
|
|
« Ответ #1 : 20-10-2004 08:11 » |
|
Помоему тебе нужен не указатель на функцию, а указатель на класс, через который ты и вызовешь эту функцию.
|
|
|
Записан
|
|
|
|
Pu
Большой босс
Offline
78
|
|
« Ответ #2 : 20-10-2004 08:22 » |
|
MOPO3, какая конкретно функция статическая или просто. Просто функцию ты без наличия обекта использовать не сможешь. Статическую пожалста, и указателя не надо. class A { static void f() {} };
в проге A::f();
извини за элементарности
|
|
« Последнее редактирование: 02-12-2007 15:20 от Алексей1153++ »
|
Записан
|
Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #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
Большой босс
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
Большой босс
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
Молодой специалист
Offline
|
|
« Ответ #6 : 20-10-2004 10:07 » |
|
заяц дело говорит, тока я бы все же это фрагментик бы обернул... не равенчас исправлять прийдется (а ведь точно прийдется на _beginthreadex)
|
|
|
Записан
|
С уважением Lapulya
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #7 : 20-10-2004 10:42 » |
|
вот только я бы эту функцию членом класса бы еще не делал, а так вроде все хорошо... эту функцию надо просто в срр файле объявить реаилизовать и юзать тамже (потому как это просто деталь реализации, причем даже не класса, а просто конструкция вызова метода)
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Pu
Большой босс
Offline
78
|
|
« Ответ #8 : 20-10-2004 10:53 » |
|
lapulya, imho нет особой разницы, она жеж статик . Это просто мой стиль, не люблю чтобы чтото выезжало из моих нэймспейсов. Просто она находится в пространстве имен этого класса и не более.
|
|
|
Записан
|
Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #9 : 20-10-2004 11:10 » |
|
дело в том, что народ который инклудит этот хеадер, получает впридачу к содственно классу и эту функцию, что с моей точки зрения - недостаток, а если это все скрыть (перенести в срр файл), то об этой функции (и ей подобных) никто и никогда не узнает (и глаза мозолить она не будет) .... и это хорошо!!! а что касается нейм спейсов так их можно и в срр прописать (а если это не нравится то отдельный хеадерочек который просто в нужный срр инклудится)
|
|
|
Записан
|
С уважением Lapulya
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #10 : 20-10-2004 11:12 » |
|
я имел ввиду не пространство имен класса а namespace
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Pu
Большой босс
Offline
78
|
|
« Ответ #11 : 20-10-2004 11:14 » |
|
lapulya, а чтоб не получил я ее приватной делаю. А так в принципе согласен с Вами, уважаемый. 8)
|
|
|
Записан
|
Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #12 : 20-10-2004 11:37 » |
|
ясно дело, что приватная, но глаз как-то мммм не то чтобы режет, но пищипывает , хотя это действительно дело вкуса
|
|
|
Записан
|
С уважением Lapulya
|
|
|
|