Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[WinAPI] Threadfunktion

Empfohlene Antworten

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]

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.

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;

}

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.