Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Потоки и ООП

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Потоки и ООП
Имя
Сообщение << Старые топики   Новые топики >>
Потоки и ООП - 2008-04-11 23:25:22.940000   
L.win

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
Ребят, расскажите как создать класс, такой чтобы его метод использовался в качестве функции потока и он же создавал этот новый поток. Прошу поконкретнее - к Страуструпу и онлайн манулам не отсылать: продж сдавать скоро, ОЧЕНЬ скоро… (Пишу в eclipse; компиллер - MinGW).
Post #: 1
RE: Потоки и ООП - 2008-04-11 23:43:00.490000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: L.win
его метод использовался бы в качестве функции потока и он же создавал этот новый поток.

"он же" – это в смысле метод?

class mythread { private: bool started; public: mythread () : started (false) {} void start () { if (!started) { if (pthread_create (...) // или чем ты там пользуешься для создания потоков started = true; } } };
Единственная неудачность – это то, что придётся создавать функцию заглушку, ибо все основные api для работы с потоками хочут указатель на функцию, которая не метод класса. Если жу ручное создание таких заглушек не устраивает, глянь на sigc++ – библиотечка, которая позволяет генерить их на лету.
Post #: 2
RE: Потоки и ООП - 2008-04-11 23:44:55.196666   
L.win

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
Тьфу, блин! Прошу прощения за неясность!..
Что бы класс создавал поток и использовал свой метод в качестве функции потока…
Post #: 3
RE: Потоки и ООП - 2008-04-11 23:54:10.440000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: L.win
Что бы класс создавал поток и использовал свой метод в качестве функции потока…

Придётся создавать заглушку. Функцию, которая будет принимать указатель на инстанс и вызывать нужный метод этого инстанса. А уж в системную функцию создания потока передавать указатель на эту заглушку, и указатель на инстанс, в качестве аргумента. Собственно, я почему про sigc++ и заговорил: он позволяет это делать относительно красиво, без лишних функций.
Post #: 4
RE: Потоки и ООП - 2008-04-12 02:18:26.286666   
L.win

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
Можно по подробнее ,и\или где почитать про sigc++ - что это библиотека, набор утилит?
Post #: 5
RE: Потоки и ООП - 2008-04-12 04:50:42.570000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Юзай статические методы и CreateThread ;), а в потоковую функцию передавай указатель на экземпляр класса. типа:
class CClass { private: &nbsp;&nbsp; HANDLE hThread; &nbsp;&nbsp; static DWORD WINAPI TreadProc( LPVOID lpParam ) &nbsp;&nbsp; { &nbsp;&nbsp; &nbsp;&nbsp; CClass *cls = (CClass *)lpParam; &nbsp;&nbsp; &nbsp;&nbsp; // что-то... &nbsp;&nbsp; } public: &nbsp;&nbsp; void Run(void) &nbsp;&nbsp; { &nbsp;&nbsp; &nbsp;&nbsp; // ... &nbsp;&nbsp; &nbsp;&nbsp; hThread = CreateThread( /* мля, не помню параметры :), lpParam - передать this */ ); &nbsp;&nbsp; &nbsp;&nbsp; // ... &nbsp;&nbsp; } }; Проверить, запущен ли уже потом можно с помощью WaitForSingleObject. К тому-же её вызов атомарный, в отличие от проверки bool переменной.
Post #: 6
RE: Потоки и ООП - 2008-04-12 12:09:44.473333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: L.win
Можно по подробнее ,и\или где почитать про sigc++ - что это библиотека, набор утилит?

гугл тебе поможет.
Post #: 7
RE: Потоки и ООП - 2008-04-14 11:37:47.996666   
L.win

Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
Пасиб!
Post #: 8
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Потоки и ООП







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.