import com.googlecode.prolog_cafe.lang.*;
/**
 * A sample program for multi-thread execution.<br>
 * Usage: <br>
 * <pre>
 *       % plcafe -cp queens.jar T
 * </pre>
 *
 * @author Naoyuki Tamura (tamura@kobe-u.ac.jp)
 * @author Mutsunori Banbara (banbara@kobe-u.ac.jp)
 */
public class T {
    public static void main(String args[]) {
	long t = System.currentTimeMillis();
	boolean r1 = true;
	boolean r2 = true;
	Term a1[] = {new IntegerTerm(10), new VariableTerm()};
	Term a2[] = {new IntegerTerm(8), new VariableTerm()};

	PrologControl e1 = new PrologControl();
	PrologControl e2 = new PrologControl();
	Term v1 = new VariableTerm();
	Term v2 = new VariableTerm();
	e1.setPredicate(new PRED_queens_2(), a1);
	e2.setPredicate(new PRED_queens_2(), a2);
	System.out.println("Start");
	e1.start();
	e2.start();
	while (r1 || r2) {
	    try {
		Thread.sleep(10);
	    } catch (InterruptedException e) {}
	    if (r1 && e1.ready()) {
		r1 = e1.next();
		if (r1) {
		    System.out.println("Success1 = " + a1[1]);
		    e1.cont();
		} else {
		    System.out.println("Fail1");
		}
	    } else if (r2 && e2.ready()) {
		r2 = e2.next();
		if (r2) {
		    System.out.println("Success2 = " + a2[1]);
		    e2.cont();
		} else {
		    System.out.println("Fail2");
		}
	    } else {
		System.out.println("Waiting");
		try {
		    Thread.sleep(100);
		} catch (InterruptedException e) {}
	    }
	}
	System.out.println("End");
	long t1 = System.currentTimeMillis();
	long t2 = t1 - t;
	System.out.println("time = " + t2 + "msec.");
	
    }
}
