Zum Inhalt springen

[WinAPI] Threadfunktion


GeneralB

Empfohlene Beiträge

Guten Morgen,

ich habe vorhin angefangen mit etwas mit Threads in C++ zu beschäftigen und möchte nun welche in ein bestehendes Programm eincoden.

Hierzu soll mir ein Thread eine Methode einer Klasse aufrufen. Wie genau kann ich der Threadfunktion die Instanz der Klasse übergeben? Die MSDN Infos zum Thema haben mich nur mehr verwirrt.

Wäre toll wenn mir da jemand helfen könnte.

VG

GeneralB


const int iMaxTNum = 5;
int toQuit = 0;

struct targ
{
int val;
};

DWORD WINAPI bla( void* param );

[ ... meine Klassen ... ]

Threads[1] = CreateThread( NULL, 0, bla, (void*)&ThreadArgs[1], 0, (LPDWORD)&ThreadIDs[ 1 ] );
// Aufruf

[...]

DWORD WINAPI bla( void* param )
{
targ *threadarg = (targ*)param;

while( toQuit != threadarg->val )
{
cout << "Tick\n";
Sleep( 500 );
//param->getOrt();
}

return 0;
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

habe hier ein paar Codestücke vergessen...

const int iMaxTNum = 5;

int toQuit = 0;

DWORD WINAPI bla( void* param );

[ ... Klassen ... ]

struct targ

{

int val;

Person &player;

};

targ ThreadArgs[ iMaxTNum ];

int ThreadIDs[ iMaxTNum ];

HANDLE Threads[ iMaxTNum ];

ThreadArgs[1].val = 1;

Threads[1] = CreateThread( NULL, 0, bla, (void*)&ThreadArgs[1], 0, (LPDWORD)&ThreadIDs[ 1 ] );

[ ... Rest von main ... ]

DWORD WINAPI bla( void *player )

{

//targ *threadarg = (targ*)player;

int check = 1;

while( check == 1 )

{

cout << "Tick\n";

Sleep( 500 );

}

return 0;

}

Muss dazu sagen, dass ich bisher keine Ahnung von Threads habe, auch die Argumente sind mir etwas schleierhaft.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, mein Problem hat sich gelöst. Der Fehler war das umcasten.

Threads[1] = CreateThread( NULL, 0, bla, (void*)&player, 0, (LPDWORD)&ThreadIDs[ 1 ] );

// Fettes muss void sein, deswegen unten wieder der recast

[...]

DWORD WINAPI bla( void* param )

{

Person* player = (Person*) param;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, mein Problem hat sich gelöst. Der Fehler war das umcasten.
Das ist keine gute Lösung. Auf diese Art und Weise kannst du nämlich immer nur einen Parameter übergeben. Wer immer die Struktur targ eingeführt hat, wird sich doch etwas dabei gedacht haben. Der Parameter val ist jetzt beispielsweise nicht mehr verfügbar. Und sobald du noch etwas anderes übergeben musst, musst du doch wieder die Struktur benutzen.

Du solltest übrigens einen Zeiger (Player*) hinzufügen. Player& ist eine Referenz. Geht auch, muss dann aber bereits bei der Initialisierung mit einer gültigen Instanz verbunden werden. Nachträgliche Zuweisung geht nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...