task manager

FSA

Erfahrenes Mitglied
Hallo ich suche einen Ouellcode womit ich die prozessorauslastung in % auslesen kann!
Ich hoffe das ist nich alzu schwer!:D
Ich verwende MSVC++ und KEIN .NET Framework in diesem Projekt
danke im Voraus
p.s. :google: bitet da auch net wiklich was brauchbares!
 
Moin,

ich kann nicht beurteilen, ob es mit Deinem MSVC++ klappt, aber ich habe just vor einigen eine Funktion geschrieben, die der DOS-Befehl TASKLIST nutzt :
C++:
/*****************************************************************************************
 *	FUNCTION    : bool COrgaServerHelperFunc::fGetSpeicherInKB()                         *
 *---------------------------------------------------------------------------------------*
 *	DESCRIPTION : Ermittelt die momentane Speicherauslastung des brechnungsservers  *
 *	                                                                                     *
 *	ARGUMENT    : None                                                                   *
 *	RETURN      : long - Speicherwert in KB ('0' im Fehlerfall)                          *
 *****************************************************************************************/
long COrgaServerHelperFunc::fGetSpeicherInKB()
{
	CFileException e;
	long lRes = 0;

	string strCMD = "tasklist > c:/TMP.txt";
	int iSys = system( strCMD.c_str() );
	if( iSys == 0 )
	{
		// ############################################################################################
		// zuerst die Datei einlesen, dann Speicherwert in der Zeile bestimmen und als long zurückgeben
		// ############################################################################################
		char *pszFileName = "C:\\TMP.txt";
		
		CStdioFile hFile;
		CStringUtils strUt;
		
		if( hFile.Open( pszFileName, CFile::modeRead|CFile::shareDenyNone, &e) )
		{
			char cZeile [100];
			while( hFile.ReadString(cZeile,100) )
			{
				strUt.trim( cZeile );
				char cSuchwert[23];
				memcpy( &cSuchwert, &cZeile[0], 22 );
				cSuchwert[22] = 0;
				string strSuchwert = string( cSuchwert );
				if( strSuchwert.compare("GSCRMSERVER_ABRECHNUNG") == 0 )  // Name der gesuchten exe-Datei !!
				{
					string strZeile = string( cZeile );
					char cSpeicherWert[14];
					memcpy( &cSpeicherWert, &cZeile[60], 13 );
					cSpeicherWert[13] = 0;
					lRes = atol( cSpeicherWert );  // Rückgabewert setzen
					break;
				}
			}
			hFile.Close ();
		} 
	}

	return lRes;
} // fGetSpeicherInKB

Musst mal mit dem DOS-Befehl unter CMD spielen ;)

Hoffe, Du kannst damit was anfangen!
Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Mit welcher Bibliothek arbeitest du, vfl_freal?
Die Klassen mit den 'C's am Anfang erscheinen mir von MFC zu sein.

Edit:
Ich hätte auch Interesse am Code :D
Darf ich den frei verwenden oder irgendwas beachten?
 
Zuletzt bearbeitet:
Moin,

ach so, stimmt - also, ich hab's mit dem Visual Studio erstellt (leider VC++ 6.0).

So Sachen wie CStdioFile und CStringUtils findest Du ihn der MFC, das ist aber nicht zwingend!

Das CMD "tasklist > c:/TMP.txt" ist ein reiner DOS-Befehl; das Einlesen und Vergleichen musst halt ggf. an Diene Bedürfnisse anpassen !

Gruß
Klaus
 
Hi.

Ihr redet irgendwie aneinander vorbei. Du ermittelst die Speicherauslaustung, MSVCplusplus möchte allerdings die Prozessorauslastung von bestimmten Prozessen ermitteln. Leistet tasklist dies überhaupt?

Außerdem ist das Verarbeiten von Ausgaben anderer Programme immer etwas fragil, vor allem da MS hin und wieder eine Kleinigkeit an der Ausgabe verändert. Weiterhin ist es eine einigermaßen furchtbare Idee eine festverdrahtete temporäre Datei zu verwenden. Du hättest ja wenigstens eine Pipe verwenden können...

Das CMD "tasklist > c:/TMP.txt" ist ein reiner DOS-Befehl
taslist gehört allerdings nicht zum Standardrepertoire von Windows sondern ist nur in bestimmten Versionen vorhanden.

Es gibt keinen einfachen Weg an die Information zu kommen. Man könnte die (undokumentierte) NtQuerySystemInformation Funktion verwenden. :suchen:

Siehe z.B. http://www.codeproject.com/kb/system/cpuusageByDudiAvramov.aspx

Gruß
 
Zurück