Потоки и ООП
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Потоки и ООП - 2008-04-11 23:25:22.940000
|
|
|
L.win
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
|
Ребят, расскажите как создать класс, такой чтобы его метод использовался в качестве функции потока и он же создавал этот новый поток. Прошу поконкретнее - к Страуструпу и онлайн манулам не отсылать: продж сдавать скоро, ОЧЕНЬ скоро… (Пишу в eclipse; компиллер - MinGW).
|
|
|
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++ – библиотечка, которая позволяет генерить их на лету.
|
|
|
RE: Потоки и ООП - 2008-04-11 23:44:55.196666
|
|
|
L.win
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
|
Тьфу, блин! Прошу прощения за неясность!.. Что бы класс создавал поток и использовал свой метод в качестве функции потока…
|
|
|
RE: Потоки и ООП - 2008-04-11 23:54:10.440000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: L.win Что бы класс создавал поток и использовал свой метод в качестве функции потока… Придётся создавать заглушку. Функцию, которая будет принимать указатель на инстанс и вызывать нужный метод этого инстанса. А уж в системную функцию создания потока передавать указатель на эту заглушку, и указатель на инстанс, в качестве аргумента. Собственно, я почему про sigc++ и заговорил: он позволяет это делать относительно красиво, без лишних функций.
|
|
|
RE: Потоки и ООП - 2008-04-12 02:18:26.286666
|
|
|
L.win
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
|
Можно по подробнее ,и\или где почитать про sigc++ - что это библиотека, набор утилит?
|
|
|
RE: Потоки и ООП - 2008-04-12 04:50:42.570000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Юзай статические методы и CreateThread ;), а в потоковую функцию передавай указатель на экземпляр класса. типа:
class CClass
{
private:
HANDLE hThread;
static DWORD WINAPI TreadProc( LPVOID lpParam )
{
CClass *cls = (CClass *)lpParam;
// что-то...
}
public:
void Run(void)
{
// ...
hThread = CreateThread( /* мля, не помню параметры :), lpParam - передать this */ );
// ...
}
};
Проверить, запущен ли уже потом можно с помощью WaitForSingleObject. К тому-же её вызов атомарный, в отличие от проверки bool переменной.
|
|
|
RE: Потоки и ООП - 2008-04-12 12:09:44.473333
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: L.win Можно по подробнее ,и\или где почитать про sigc++ - что это библиотека, набор утилит? гугл тебе поможет.
|
|
|
RE: Потоки и ООП - 2008-04-14 11:37:47.996666
|
|
|
L.win
Сообщений: 20
Оценки: 0
Присоединился: 2007-06-08 18:30:12.490000
|
Пасиб!
|
|
|
|
|