Prozessmanagement



  • Power Off schrieb:

    Das Starten von Prozessen ist bei Windows extrem langsam.

    dauert aber keine 2 minuten 😉
    @fragesteller: was macht das 'starterprogramm' in der zwischenzeit? kann es sein, dass es dem system rechenzeit entzieht? ansonsten kannste die priorität des gestarteten programms hochsetzen. guckst du: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setthreadpriority.asp
    und: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setpriorityclass.asp



  • Hallo,

    nein, der Prozess, der das Programm aufruft wartet nur, bis das Programm fertig ist, um es dann erneut aufzurufen.
    Habs jetzt mal mit SetPriorityClass(...) versucht:

    if ( CreateProcess( EXE,						// auszuführende Datei mit vollst. Pfad
    						argumente,					// Kommandozeilenargumente
    						NULL,
    						NULL,
    						true,
    						CREATE_DEFAULT_ERROR_MODE,
    						NULL,
    						PFAD,						// Pfad, indem das auszuführende Programm liegt
    						&start_info,				// StartupInfo
    						&proc_info					// erhält Infos über den aufgerufenen Prozess
    										) == 0 ) {
    
    		printf("Fehler beim Starten des Programms\n");
    		exit (1);
    	}
    
    	HANDLE hprocess = proc_info.hProcess;
    	unsigned long ExitCode;
    
    	if ( SetPriorityClass(hprocess, HIGH_PRIORITY_CLASS) == NULL) {
    		printf("Prioritaet konnte nicht erhoeht werden!\n");
    		exit (1);
    	}
    

    So klappt das auch und geht viel schneller, nur das dann sonst überhaupt nichts mehr geht bis das Programm beendet ist. Da ich ME hab und das Prog auch auf NT laufen sollte, geht ein kleinerer Level als HIGH_PRIORITY_CLASS nicht.

    Bei SetThreadPriority(...) hab ich das Problem, dass THREAD_SET_INFORMATION gesetzt sein muss. Hab mir das mal angeschaut, aber kapier leider nicht, wie das genau geht. Hat das jemand schonmal benutzt oder kann mir sagen, wie ich das machen muss? Bei SetThreadPriority(...) könnte ich die Prioritaet wohl stufenweise erhöhen und schauen, was am besten passt.

    Danke für eure Hilfe!
    MFG
    Barney



  • nicht böse gemeint - aber gehört das nicht mehr nach WinAPI? die leute da sollte mehr drüber wissen



  • ok, werds da mal versuchen...

    Danke nochmals!



  • Barney schrieb:

    Hallo,
    nein, der Prozess, der das Programm aufruft wartet nur, bis das Programm fertig ist, um es dann erneut aufzurufen.

    zeig mal wie es wartet. wenn du's anders machst als mit 'WaitForSingleObject()' könnte es schon wertvolle rechenzeit verballern



  • mach es so:

    // Auf Prozessende warten
    	do
    		if (!GetExitCodeProcess(hprocess, &ExitCode)) {
    			printf("Prozess konnte nicht gefunden werden\n");
    			exit(1);
    		}
    	while (ExitCode == STILL_ACTIVE);
    


  • Hey Leute, hier geht es nur um ANSI C! Stell euere Fragen und Antworten in richtigen Forum 😡



  • Barney schrieb:

    // Auf Prozessende warten
    	do
    		if (!GetExitCodeProcess(hprocess, &ExitCode)) {
    			printf("Prozess konnte nicht gefunden werden\n");
    			exit(1);
    		}
    	while (ExitCode == STILL_ACTIVE);
    

    aha 😉
    die do/while-schleife verbläst cpu-cycles ohne ende.
    mach es so ungefähr:

    WaitForSingleObject (hprocess, INFINITE);
    

    supertux schrieb:

    Hey Leute, hier geht es nur um ANSI C! Stell euere Fragen und Antworten in richtigen Forum 😡

    wie heisst das zauberwort?



  • net schrieb:

    wie heisst das zauberwort?

    SOFORT! 🤡



  • supertux schrieb:

    net schrieb:

    wie heisst das zauberwort?

    SOFORT! 🤡

    aufgrund eures gemeckers läuft die diskussion jetzt in zwei threads ab, einmal hier und einmal im winapi-forum. anstatt zu warten bis ein mod das verschiebt... tztztz...



  • oki, so klappts auch!

    Muchas gracias!
    MFG
    Barney


Anmelden zum Antworten