Archief - (C++) Single core gebruikers ervaren 100% CPU usage bij gebruik van threads

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

FWP

Legacy Member
Als ik threads implementeer in een hook van mij, ervaren single core gebruikers 100% CPU usage.

Hoe kan ik dit vermijden? Hier onder stukjes van de code, en de volledige broncode is hier beschikbaar:

Code:
	// Keyboard hook thread
	HANDLE hKeyboardHook;
	DWORD dwKeyboardHook;
	hKeyboardHook = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MyDirectInput, 0, 0, &dwKeyboardHook);

	// Focus checking thread
	HANDLE hCheckFocus;
	DWORD dwCheckFocus;
	hCheckFocus = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)FocusChecking, 0, 0, &dwCheckFocus);

Code:
DWORD WINAPI MyDirectInput(LPVOID lpParm)
{
	HINSTANCE hInstance = GetModuleHandle(0);
	InitializeDirectInput(hInstance, 0);
	MessageLoop();

	return 0;
}

// Will check whether the game has focus, and if so, clip the cursor to the game
DWORD WINAPI FocusChecking(LPVOID lpParm)
{
	while (true)
	{
		if (hasLostFocus & GetForegroundWindow() == FindWindow(0, targetWindowName))
		{
			ClipCursorToGame();
			hasLostFocus = false;
		}
		Sleep(1);
	}

	return 0;
}

Fraggie

Legacy Member
Het is toch geen zonde indien die sleep wat groter is? Ik beschik nog over een single core en mijn ervaring met een andere klasse bibliotheek was net het zelfde. 100x trager scanner is nog steeds sneller dan ik een actie kan uitvoeren op de PC, maar is 100x minder belastend.

Is is dat geen optie?

FWP

Legacy Member
Fraggie zei:
Het is toch geen zonde indien die sleep wat groter is? Ik beschik nog over een single core en mijn ervaring met een andere klasse bibliotheek was net het zelfde. 100x trager scanner is nog steeds sneller dan ik een actie kan uitvoeren op de PC, maar is 100x minder belastend.

Is is dat geen optie?

Kan ik wel proberen, maar weet niet of het resultaat geeft.

NeverwinterX

Legacy Member
Tja je bent "busy waiting" in die FocusChecking thread. Is er geen enkele manier om via een event te weten te komen of je focus hebt?

Litheon

Legacy Member
Je kan toch nog een extra hook installeren om window messages te verkrijgen van uw spel (worms)? En dan controleer je op WM_KILLFOCUS of WM_ACTIVATEAPP of WM_ACTIVATE of zo, niet?

FWP

Legacy Member
Litheon zei:
Je kan toch nog een extra hook installeren om window messages te verkrijgen van uw spel (worms)? En dan controleer je op WM_KILLFOCUS of WM_ACTIVATEAPP of WM_ACTIVATE of zo, niet?

Ik heb het probleem al opgelost door Sleep(100) in de thread functie te zetten.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan