package gnu.javax.sound.sampled.wce;

/**
 * コールバックウインドウスレッド
 */
class WCECallbackWindowThread extends Thread {
	/**
	 * イベントキュー
	 */
	private final WCEEventQueue eventQueue;
	
	/**
	 * ネイティブウインドウが初期化されたか
	 */
	private volatile boolean initialized;
	
	public WCECallbackWindowThread(WCEEventQueue eventQueue) {
		super("Windows CE Sound callback thread");
		this.eventQueue = eventQueue;
	}
	
	/**
	 * ネイティブウインドウのメッセージループを実行する
	 */
	private native void messageLoop(WCEEventQueue eventQueue);
	
	public void run() {
		// メッセージループに入る
		messageLoop(this.eventQueue);
	}
	
	/**
	 * ネイティブウインドウが初期化されるまで待つ
	 */
	public synchronized void waitForInitialized() throws InterruptedException{
		while (! this.initialized) {
			wait();
		}
	}
	
	/**
	 * ネイティブウインドウが初期化されたことを設定する
	 * このメソッドはネイティブメソッド内から呼び出される。
	 */
	private synchronized void nativeWindowInitialized() {
		this.initialized = true;
		notifyAll();
	}
}
