|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ф-ия потока - член класса |
|
|
Ф-ия потока - член класса
|
Пользователь Сообщения: 90 |
Профиль | Отправить PM | Цитировать Мне нужно, чтобы конструктор объекта создавал новый поток. При этом, функция потока также должна быть методом этого объекта. Казалось бы - нормальные требования. Но у меня возникает проблема, которую я не знаю как решить. Проблема заключается в следующем: третий аргумент функции __beginthreadex имеет тип void(__stdcall*) (void*), но если функция потока определена как метод класса, то указатель на неё будет иметь вид void(__stdcall Bug:: *) (void *).
Расскажите пожалуйста как проблему решить (красиво)??? Я пытался сделать функцию потока friend'ом, чтобы "вытащить" её в глобальную область видимости, но она, естественно использует переменные и другие методы класса, при попытке вызвать функцию-метод с помощью Bug::Chase() (например) происходит следующая ругань: 'Bug::Chase' : illegal call of non-static member function. See declaration of 'Chase' Дело в том, что я совсем новичок и разобраться самому очень тяжело. Поможите, чем можите! Буду благодарен. |
|
Отправлено: 23:18, 05-03-2003 |
Пользователь Сообщения: 65
|
Профиль | Отправить PM | Цитировать Если уж юзать friend-овую функцию, то, поскольку она не в классе, а глобальная, то можно глобально определить экземпляр этого класса, а потом его и юзать в этой функции
З.Ы. - я пока тоже не профи, так что просьба не пинать ногами, а посоветовать, как лучше, если мой подход "не очень хороший" |
------- Отправлено: 04:52, 06-03-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Sharkky
так тебе ж все написали: Цитата:
|
|
------- Отправлено: 07:39, 06-03-2003 | #3 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать Sharkky
Примерно так: class Sharky { * *//... * *Sharky() * *{ * * * * __beginthreadex(/*не помню какие параметры */, thread_starter, /* ... */); * *} * *// ... * *static void thread_starter(void * obj) * *{ * * * * static_cast<Sharky*>(obj)->thread(); * *} * *// Метод, который запускается в потоке. * *void thread() * *{ * *} } |
------- Отправлено: 07:47, 06-03-2003 | #4 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Sharkky
Еще, если this передать, можно и без cast-а обойтись. И к тому же из статических функций можно вызывать нестатические, несмотря на то, что стандарт по этому поводу по-моему ничего определенного не говорит. |
|
------- Отправлено: 21:35, 06-03-2003 | #5 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
Цитата:
|
|
------- Отправлено: 18:39, 07-03-2003 | #6 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать К чему именно относится "как" из цитаты?
|
------- Отправлено: 20:53, 07-03-2003 | #7 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
Как вызвать из статичесской функции класса нестатическую? Если подразумевается, что у нас есть указатель на объект, то чем это будет отличаться от "обычного" вызова метода "обычной" функцией, и почему стандарт об этом ничего не говорит? |
------- Отправлено: 22:03, 07-03-2003 | #8 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать ivank
Я ничего не видел об этом в стандартах, может и проглядел в свое время. Но это работает правильно. Условно. X::nonstatic { } X::static { return nonstatic; } |
------- Отправлено: 09:06, 08-03-2003 | #9 |
редкий гость Сообщения: 1696
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
Вообще-то тогда какой-то бред получается. Если функция не статическая, то она обращается к полям объекта. А если она обращается к полям объекта, то нужно иметь объект аки указатель this. А откуда ему взяться в статической функции? |
------- Отправлено: 12:47, 09-03-2003 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - Что такое член группы администраторов!!! Не могу ничего установить | domber | Microsoft Windows Vista | 0 | 04-04-2007 22:08 | |
Может ли компьютер (не член домена) получить доступ к расшаренной папке на домене? | ES | Microsoft Windows NT/2000/2003 | 36 | 23-06-2006 09:55 | |
Монитор+TV и 2 звуковых потока | BlackMonk | Хочу все знать | 6 | 19-10-2004 20:37 | |
Характеристика потока Е1 | Zx | Сетевые технологии | 9 | 25-09-2003 02:46 | |
Чем отличается Полный Член от Члена | nikich555 | О сайте и форуме | 11 | 27-01-2003 08:32 |
|