Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ф-ия потока - член класса

Ответить
Настройки темы
Ф-ия потока - член класса

Пользователь


Сообщения: 90
Благодарности: 1

Профиль | Отправить 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
Благодарности: 1

Профиль | Отправить PM | Цитировать


Если уж юзать friend-овую функцию, то, поскольку она не в классе, а глобальная, то можно глобально определить экземпляр этого класса, а потом его и юзать в этой функции

З.Ы. - я пока тоже не профи, так что просьба не пинать ногами, а посоветовать, как лучше, если мой подход "не очень хороший"

-------
Если долго мучиться - что-нибудь заглючиться.
Если долго глючиться - ну... а винду пераставлять не пробовали? :)


Отправлено: 04:52, 06-03-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Sharkky
так тебе ж все написали:
Цитата:
illegal call of non-static member function
Надо сделать ее статической (в смысле класса, чтоб не перепутали, а то static-ов уж чересчур много )

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 07:39, 06-03-2003 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


Sharkky
Примерно так:
Код: Выделить весь код
class Sharky
{
 * *//...
 * *Sharky()
 * *{
 * * * * __beginthreadex(/*не помню какие параметры */, thread_starter, /* ... */);
 * *}
 * *// ...
 * *static void thread_starter(void * obj)
 * *{
 * * * * static_cast<Sharky*>(obj)->thread();
 * *}
 * *// Метод, который запускается в потоке.
 * *void thread()
 * *{
 * *}
}

-------
http://ivank.ru


Отправлено: 07:47, 06-03-2003 | #4


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


Sharkky
Еще, если this передать, можно и без cast-а обойтись.
И к тому же из статических функций можно вызывать нестатические, несмотря на то, что стандарт по этому поводу по-моему ничего определенного не говорит.

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 21:35, 06-03-2003 | #5


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


vasketsov
Цитата:
И к тому же из статических функций можно вызывать нестатические, несмотря на то, что стандарт по этому поводу по-моему ничего определенного не говорит.
Как?

-------
http://ivank.ru


Отправлено: 18:39, 07-03-2003 | #6


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


К чему именно относится "как" из цитаты?

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 20:53, 07-03-2003 | #7


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


vasketsov
Как вызвать из статичесской функции класса нестатическую? Если подразумевается, что у нас есть указатель на объект, то чем это будет отличаться от "обычного" вызова метода "обычной" функцией, и почему стандарт об этом ничего не говорит?

-------
http://ivank.ru


Отправлено: 22:03, 07-03-2003 | #8


Модер


Сообщения: 1716
Благодарности: 17

Профиль | Сайт | Отправить PM | Цитировать


ivank
Я ничего не видел об этом в стандартах, может и проглядел в свое время.

Но это работает правильно.
Условно.

X::nonstatic
{
}

X::static
{
 return nonstatic;
}

-------
Васкецов Сергей
http://registry.oszone.net


Отправлено: 09:06, 08-03-2003 | #9


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


vasketsov
Вообще-то тогда какой-то бред получается. Если функция не статическая, то она обращается к полям объекта. А если она обращается к полям объекта, то нужно иметь объект аки указатель this. А откуда ему взяться в статической функции?

-------
http://ivank.ru


Отправлено: 12:47, 09-03-2003 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Ф-ия потока - член класса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - Что такое член группы администраторов!!! Не могу ничего установить 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




 
Переход