# Prozesse und Prioritäten



## HilfeSucher (27. Nov 2007)

Hallo ihr Experten, ich hab ein Performance Problem:
und zwar öffnet mein Programm einen exteren Prozess, der furchtbar lange rechnet. Um dennoch vernünftig am Computer arbeiten zu können, habe ich bisher den Prozess per Hand im Taskmanager auf "niedrige Priorität" gestellt. Kann ich das auch irgendwie aus meinem Programm heraus machen?
Hab bisher die Option nur unter Threads gefunden, aber die macht nicht das was ich mir vorstelle.

Thx 4 Help


----------



## Ralph-Uwe (27. Nov 2007)

Hi HilfeSucher,

Ich bin zwar auch kein Fachmann was die Performance angeht, aber
lass doch die externe Anwendung im eigenen Thread laufen und setze für den die Prioität runter.

Ralph


----------



## HilfeSucher (27. Nov 2007)

Hallo, hab ich schon versucht und bringt leider gar nix... :?


----------



## happy_robot (27. Nov 2007)

ein prozess ist eigenständig und kann nur vom system priorisiert werden.


----------



## HilfeSucher (28. Nov 2007)

und die Systempriorität kann ich nicht beeinflussen? :?:


----------



## tuxedo (28. Nov 2007)

Doch, das geht. Aber eben nicht mit Java. Wenn du deine Prozesse mit "start" aufrufst, dann schau dir das mal an:



> C:\Documents and Settings\achr>start /?
> Starts a separate window to run a specified program or command.
> 
> START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
> ...


----------



## HilfeSucher (28. Nov 2007)

mmm werd nicht ganz schlau daraus...
Ich starte meine Prozesse mit dem ProcessBuilder


```
ProcessBuilder scip = new ProcessBuilder(new String[] {
"cmd","/c","Pfad\\programm.exe"});
```

ist das das selbe wie über "start" aufrufen?  ???:L  - falls nicht wie geht das mit start?
Ich könnte auch damit leben, wenn meine gesammtes Programm eine niedrigere Priorität hat, wenn das einfacher zu implementieren ist.


----------



## tuxedo (28. Nov 2007)

Forumsuche hätte geholfen:

http://www.java-forum.org/de/viewtopic.php?t=57084&highlight=exec+cmd+start

- Alex


----------



## HilfeSucher (28. Nov 2007)

OK es klappt soweit das das externe Programm mit niedriger Priorität läuft.
Allerdings bekomme ich jetzt den Inputstream nicht mehr zu fassen...und mein p.waitFor() wird auch einfach ignoriert.
Mein Code sieht so aus:


```
Process p = Runtime.getRuntime().exec(builder.toString());
				
				InputStream is =p.getInputStream();
				BufferedReader br = new BufferedReader(new
			        		InputStreamReader(is));
				
				while(p.exitValue()!=0){
					System.out.println(br.readLine());
				}
				
				p.waitFor();
				
				System.out.print("Fertig");
```

p.exitValue wirft mir ein "der Prozess ist noch nicht beendet" um den Kopf und beendet mein "Try".
Ein einfaches

```
while(br.readLine()!=null)
```
wird auch einfach übergangen. Kann es daran liegen, das mein Programm ein Fenster öffnet und dort den Output reinschreibt?

Danke für eure Zeit


----------



## tuxedo (28. Nov 2007)

Ja, das wirds sein. Bin mir nicht sicher ob du an die Prozessausgabe noch drankommst wenn du's mit "start" gestartet hast.

- Alex


----------

