# Hintergrund - Threads



## Kaladial (13. Dez 2007)

moin

es geht um folgendes:
ich habe 5 com-ports mit denen ich gleichzeitig komunizieren will, 
also hab ich mir gedacht ich schreib nen programm welches mehrere threads gleichzeitig aufmacht und an den coms lauscht oder mit ihnen interagiert... 

also hab ich mein etwas älteren quellcode genommen und angepasst... 
das problem: das war code der im vordergrund lief, heist wenn die threads gestartet sind kann man an der grafischen oberfläche nix mehr machen... 

das war für das problem damals auch ok so, aber nun sollen die threads in den hintergrund und da arbeiten ... 
wie muss ich meinen code umschreiben um das hinzubekommen?

hier der code:

aufruf:

```
ScannerControl sc = new ScannerControl(comport, baudrate, datenbits, paritaet, stopbits, geraet, threadCounter);
		sc.scannerRead();
```


ScannerControl.java:

```
package ScanControl;

import java.net.InetAddress;
import java.util.Vector;

public class ScannerControl {
	
	private Vector<ScannerThread> threads = new Vector<ScannerThread>(); 
	private String comport[]; 
	private int baudrate[]; 
	private int datenbits[]; 
	private String paritaet[]; 
	private int stopbits[]; 
	private String geraet[]; 
	private int threadCount=0;
	
	public ScannerControl(String comport[], int baudrate[], int datenbits[], String paritaet[], int stopbits[], String geraet[] , int threadCount) {
		this.comport=comport;
		this.baudrate=baudrate;
		this.datenbits=datenbits;
		this.paritaet=paritaet;
		this.stopbits=stopbits;
		this.geraet=geraet;
		this.threadCount = threadCount; 
	} 

	synchronized public void scannerRead() { 
		for (int i = 0; i < threadCount; i++) { 
			ScannerThread thread = new ScannerThread(this, comport, baudrate, datenbits, paritaet, stopbits, geraet, i); 
			threads.add(thread); 
			thread.start(); 
		} 
		try { 
			this.wait(); // Stoppt bis notify aufgerufen wird 
		} catch (InterruptedException e) { 
			e.printStackTrace(); 
		} 
	} 

	public synchronized void removeThread(ScannerThread thread) { 
		threads.remove(thread); 
		if (threads.size() == 0) { 
			this.notify(); 
		} 
	} 

}
```

ScannerThread.java:

```
package ScanControl;

public class ScannerThread extends Thread {
	
	ScannerControl scanner;
	private String comport[]; 
	private int baudrate[]; 
	private int datenbits[]; 
	private String paritaet[]; 
	private int stopbits[]; 
	private String geraet[]; 
	int threadid; 

	public ScannerThread(ScannerControl scanner,String comport[], int baudrate[], int datenbits[], String paritaet[], int stopbits[], String geraet[] , int threadid) {
		this.scanner=scanner;
		this.comport=comport;
		this.baudrate=baudrate;
		this.datenbits=datenbits;
		this.paritaet=paritaet;
		this.stopbits=stopbits;
		this.geraet=geraet;
		this.threadid = threadid; 
	}
	
	public void run() { 
		try { 
			while (true) { 
				//System.out.println("threadid:"+threadid);
				//sleep(5000);
/*				if () { 
					break; 
				} 
				if () { 
				}*/ 
			} 
		} catch (Exception e){} 
		scanner.removeThread(this); 
	} 
}
```


thx für hilfe

mfg Kala


----------



## Kaladial (13. Dez 2007)

hat sich erledigt bin selbst drauf gekommen


----------



## HoaX (13. Dez 2007)

ScannerControl: Zeile 35: this.wait()

da wartest du doch explizit bis der gestartete Thread zu ende ist ... machs raus und feddisch


----------



## Kaladial (13. Dez 2007)

richtig  wie gesagt is mir dann auch selbst aufgefallen... ich hatte es nur vergessen


----------

