| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > CreateThread не компилиться |
| Автор: Simeon 25.2.2004, 11:09 |
| Может кто сталкивался. примеры кода: 1. Так компилится: //-------------------------------------------------------- extern DWORD WINAPI gate(LPVOID arg); HANDLE hTHR; LPDWORD lpThrID=NULL; hTHR=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)gate,NULL,0,lpThrID); //--------------------------------------------------------- 2. А так нет: //-------------------------------------------------------- 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 об этом нет ни слова. |
| Автор: Simeon 25.2.2004, 11:39 |
| Проблемма решилась Привожу для справки ( может кому понадобится): Нашел на http://adam.stup.ac.ru/Developer/ArticleDetail.aspx?ar=1576&l=n&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; } Я проверил. Работает. |