Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Wielowątkowość w klasach

Ostatnio zmodyfikowano 2009-10-07 17:22
Autor Wiadomość
jimmye
Temat założony przez niniejszego użytkownika
[WinAPI] Wielowątkowość w klasach
» 2009-10-06 23:18:32
Mam taki problem z tworzeniem wątków.
Oto deklaracja funkcji, która ma się wykonywać:
C/C++
DWORD WINAPI Engine::HandleConnection( LPVOID )
{
}
Tak tworzę wątek:
C/C++
this->Tconn_handler = CreateThread( NULL, 0, this->HandleConnection, NULL, 0, NULL );
Jest jakaś niezgodność z deklaracją funkcji, taką mam treść błędu:

error: argument of type `DWORD (Engine::)(void*)' does not match `DWORD (*)(void*)'|
[code]
P-10682
DejaVu
» 2009-10-07 14:33:13
Ja bym zrobił tak:
C/C++
class Klasa
{
private:
    static DWORD WINAPI runThread( const Klasa * pKlasa );
public:
    void run();
}; //class Klasa

//...

//static
DWORD WINAPI Klasa::runThread( const Klasa * pKlasa )
{
    //tutaj kod
}

void Klasa::run()
{
    this->Tconn_handler = CreateThread( NULL, 0, runThread, this, 0, NULL );
}
Są szanse, że nie będzie błędu kompilacji (jednak nie jestem pewien bo nie testowałem ;p).

P-10686
jimmye
Temat założony przez niniejszego użytkownika
» 2009-10-07 19:23:00
Oj chyba tak też nie da rady :P


engine.cpp|70|error: invalid conversion from `DWORD (*)(Engine*)' to `DWORD (*)(void*)'|
engine.cpp|70|error:   initializing argument 3 of `void* CreateThread(_SECURITY_ATTRIBUTES*, DWORD, DWORD (*)(void*), void*, DWORD, DWORD*)'|

Próbowałem też na inne sposoby ale nic z tego..
P-10709
DejaVu
» 2009-10-07 20:02:56
C/C++
#include <windows.h>
class Klasa
{
private:
    static DWORD WINAPI runThread( const Klasa * pKlasa );
public:
    void run();
}; //class Klasa

//...

//static
DWORD WINAPI Klasa::runThread( const Klasa * pKlasa )
{
    //tutaj kod
}

void Klasa::run()
{
    CreateThread( NULL, 0, reinterpret_cast < LPTHREAD_START_ROUTINE >( runThread ), this, 0, NULL );
}

int main()
{
    return 0;
}
P-10710
jimmye
Temat założony przez niniejszego użytkownika
» 2009-10-08 13:54:04
Dzięki teraz działa :P
Gdybym ja tak wszystkie błędy rozumiał..
P-10714
manfred
» 2009-10-07 17:22:30
Będzie - DWORD WINAPI(const Klasa*) to nie DWORD WINAPI(void*). Konieczna będzie zmiana typu argumentu na void* i rzutowanie w środku albo rzutowanie przy CreateThread.
P-19408
« 1 »
  Strona 1 z 1