Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CreateThread не компилиться, если функция - метод класса 
:(
    Опции темы
Simeon
Дата 25.2.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.2.2004

Репутация: нет
Всего: нет



Может кто сталкивался.

примеры кода:
1. Так компилится:
//--------------------------------------------------------
extern DWORD WINAPI gate(LPVOID arg);
HANDLE hTHR;
LPDWORD lpThrID=NULL;
hTHR=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gate,NULL,0,lpThrID);
//---------------------------------------------------------

2. А так нет: omg.gif
//--------------------------------------------------------
class cserver{
public:
static DWORD WINAPI gate(LPVOID arg);
};
//--------------------------------------------------------
cserver server;
HANDLE hTHR;
LPDWORD lpThrID=NULL;
hTHR=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)server.gate,NULL,0,lpThrID);
//---------------------------------------------------------

Пишет:
error C2440: 'type cast' : cannot convert from 'overloaded-function'
to 'LPTHREAD_START_ROUTINE'

Я не понял. Может вообще нельзя методы юзать как потоки.
Но в MSDN об этом нет ни слова.
PM MAIL   Вверх
Simeon
Дата 25.2.2004, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 24.2.2004

Репутация: нет
Всего: нет



Проблемма решиласьsmile.gif
Привожу для справки ( может кому понадобится):

Нашел на http://adam.stup.ac.ru/Developer/ArticleDe...&mi=106&mic=363

Напрямую вызвать метод как поток нельзя. Есть только workaround( путь в обход)

Создается статическая функция член класса, которая и запускается как поток. В нее передается объект данного класса. А затем вызывается тот метод, который должен работать как поток.

Код:

class CDemo
{
public:
static DWORD WINAPI ThreadStub(LPVOID Parameter)
{
((CDemo*)Parameter)->Thread();
}
void Thread()
{
...
}
};


int main(int argc, char* argv[])
{
CDemo c;
DWORD Dummy;
HANDLE h=CreateThread(NULL,NULL,CDemo::ThreadStub,&c,NULL,&Dummy);
WaitForSingleObject(h,INFINITE);
return 0;
}

Я проверил. Работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0376 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.