Jojobets |
Отправлено: 18.05.2005, 15:16 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 16
|
В одном из методов класса пытаюсь создать поток при помощи CreateThread на основе другого метода этого же класса (динамического). И ничего не выходит.
class myclass
{
public:
__fastcall myclass();
DWORD WINAPI method1(LPVOID);
void __fastcall method2();
};
__fastcall myclass::myclass(){}
DWORD WINAPI myclass::method1(LPVOID)
{
//Что-то делаем...
ExitThread(0);
return 0;
}
void __fastcall myclass::method2()
{ unsigned long threadID;
HANDLE mthread;
mthread = CreateThread(NULL,0,method1,0,0,&threadID);
}
Как можно решить проблему? |
|
xim |
Отправлено: 18.05.2005, 19:38 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
CODE |
DWORD __declspec(dllexport) WINAPI TMyClass::ThreadFunc()
// при объявлении класса не забудь extern "C" {}
{
// do anything
return 0L;
}
//---------------------------------------------------------------------------
typedef DWORD (WINAPI *PThrFnc)(LPVOID);
//---------------------------------------------------------------------------
void TMyClass::any_method()
{
PThrFnc func=(PThrFnc)GetProcAddress(GetModuleHandle(NULL),"@TMyClass@ThreadFunc$qqsv");
if(func){
DWORD thri;
HANDLE thr=CreateThread(NULL,0,func,this,CREATE_SUSPENDED,&thri);
if(thr){
ResumeThread(thr);
WaitForSingleObject(thr,100);
CloseHandle(thr);
}
}
}
|
Но это не очень хороший стиль — передавать метод как процедуру исполнения потока. Кроме того, если TMyClass — наследник TWinControl, то возникают некоторые проблемы при работе с оконными обработчиками. А так — файлик пописать или какие-нибудь другие мелочи — можно. |
|
|