home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1997 August / PCO0897.ISO / filesbbs / os2 / fp1os2.arj / OS2 / DATA / 49 / C / 0 / F_26836 / JScriptScheduler.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-05-15  |  3.6 KB  |  196 lines

  1. import stardiv.tools.HoldJavaEnvironment;
  2.  
  3. class JScriptScheduler implements Runnable {
  4.    public static Object aInUse = new Object();
  5.    private static JScriptRuntimeInstance pActGlobRTI = null;
  6.    private static Thread pRunThread = null;
  7.    private static JSbxQueue pTaskQueue = null;
  8.    public static JSbxQueue pRunningQueue = null;
  9.    private static JScriptScheduler pScheduler = null;
  10.    private static boolean bStopTaskThread;
  11.    private static int nJScriptThreadId;
  12.    private static JScriptScheduler pActTask;
  13.    public static JScriptScheduler pWaitForRTI;
  14.    private JScriptRunAsync aProcess;
  15.    private boolean bForceAsync;
  16.  
  17.    private JScriptScheduler() {
  18.    }
  19.  
  20.    public JScriptScheduler(JScriptRunAsync var1, boolean var2) {
  21.       this.aProcess = var1;
  22.       this.bForceAsync = var2;
  23.    }
  24.  
  25.    public static final String DumpStaticMemory() {
  26.       return null;
  27.    }
  28.  
  29.    public static final void DoExecute(JScriptScheduler var0) {
  30.       if (var0 == null) {
  31.          do {
  32.             Object var9 = aInUse;
  33.             synchronized(var9) {
  34.                JSbxQueue var3 = pRunningQueue;
  35.                synchronized(var3){}
  36.  
  37.                try {
  38.                   if (pRunningQueue.NoOfElements() != 0) {
  39.                      var0 = (JScriptScheduler)pRunningQueue.Get();
  40.                      pWaitForRTI = var0;
  41.                   } else {
  42.                      var0 = null;
  43.                   }
  44.                } catch (Throwable var6) {
  45.                   throw var6;
  46.                }
  47.             }
  48.  
  49.             if (var0 != null) {
  50.                DoExecute(var0);
  51.             }
  52.          } while(var0 != null);
  53.  
  54.       } else {
  55.          JScriptScheduler var1 = pActTask;
  56.          pActTask = var0;
  57.          if (var0.aProcess != null) {
  58.             var0.aProcess.run();
  59.          }
  60.  
  61.          pActTask = var1;
  62.       }
  63.    }
  64.  
  65.    public static JScriptRuntimeInstance SetActRTI(JScriptRuntimeInstance var0) {
  66.       Object var1 = aInUse;
  67.       synchronized(var1){}
  68.  
  69.       JScriptRuntimeInstance var4;
  70.       try {
  71.          JScriptRuntimeInstance var3 = pActGlobRTI;
  72.          pActGlobRTI = var0;
  73.          pWaitForRTI = null;
  74.          var4 = var3;
  75.       } catch (Throwable var6) {
  76.          throw var6;
  77.       }
  78.  
  79.       return var4;
  80.    }
  81.  
  82.    public static void SuspendExecutionAndStart(JScriptScheduler var0) {
  83.       Object var1 = aInUse;
  84.       synchronized(var1){}
  85.  
  86.       try {
  87.          if (Thread.currentThread() == pRunThread) {
  88.             if (pActGlobRTI != null && !var0.bForceAsync) {
  89.                pRunningQueue.Append(var0);
  90.                pActGlobRTI.SuspendExecution();
  91.             } else {
  92.                pTaskQueue.Append(var0);
  93.             }
  94.          } else {
  95.             pTaskQueue.Append(var0);
  96.          }
  97.       } catch (Throwable var3) {
  98.          throw var3;
  99.       }
  100.  
  101.    }
  102.  
  103.    public static void StopAllPendingAndNoneRecursiveScripts(Object var0) {
  104.       JSbxQueue var1 = new JSbxQueue((Object)null);
  105.       Object var2 = aInUse;
  106.       synchronized(var2) {
  107.          JSbxQueue var4 = pTaskQueue;
  108.          synchronized(var4) {
  109.             JSbxQueue var6 = new JSbxQueue((Object)null);
  110.  
  111.             while(pTaskQueue.NoOfElements() != 0) {
  112.                Object var7 = pTaskQueue.Get();
  113.                JScriptScheduler var8 = (JScriptScheduler)var7;
  114.                JavaScript var9 = var8.aProcess.getDocManager();
  115.                if (var9 == var0) {
  116.                   var1.Append(new CancelStruct(var8.aProcess, var9, var8.aProcess.GetAndResetCallbackID()));
  117.                } else {
  118.                   var6.Append(var7);
  119.                }
  120.             }
  121.  
  122.             while(var6.NoOfElements() != 0) {
  123.                Object var18 = var6.Get();
  124.                pTaskQueue.Append(var18);
  125.             }
  126.  
  127.             if (pActGlobRTI != null) {
  128.                JavaScript var19 = pActGlobRTI.GetJSManager().GetJavaScriptObj();
  129.                if (Thread.currentThread() != pRunThread && var19 == var0) {
  130.                   JSbxQueue var20 = pRunningQueue;
  131.                   synchronized(var20){}
  132.  
  133.                   try {
  134.                      while(pRunningQueue.NoOfElements() != 0) {
  135.                         JScriptScheduler var10 = (JScriptScheduler)pRunningQueue.Get();
  136.                         var1.Append(new CancelStruct(var10.aProcess, var10.aProcess.aRP.aJSObj, var10.aProcess.GetAndResetCallbackID()));
  137.                      }
  138.                   } catch (Throwable var14) {
  139.                      throw var14;
  140.                   }
  141.  
  142.                   pActGlobRTI.StopExecution();
  143.                   var1.Append(new CancelStruct(pActTask.aProcess, var19, pActTask.aProcess.GetAndResetCallbackID()));
  144.                }
  145.             }
  146.          }
  147.       }
  148.  
  149.       while(var1.NoOfElements() != 0) {
  150.          CancelStruct var17 = (CancelStruct)var1.Get();
  151.          var17.aJSInst.DoCallback(-10, "", var17.iCallbackId);
  152.          var17.aTask.RemoveFromTaskList();
  153.       }
  154.  
  155.    }
  156.  
  157.    public static void StopActiveScript() {
  158.       if (pActGlobRTI != null) {
  159.          pActGlobRTI.StopExecution();
  160.       }
  161.  
  162.    }
  163.  
  164.    static int getJScriptThreadId() {
  165.       return nJScriptThreadId;
  166.    }
  167.  
  168.    public void run() {
  169.       JScriptScheduler var5;
  170.       for(nJScriptThreadId = HoldJavaEnvironment.getThreadId(); !bStopTaskThread; DoExecute(var5)) {
  171.          var5 = null;
  172.          var5 = (JScriptScheduler)pTaskQueue.Get();
  173.          Object var2 = aInUse;
  174.          synchronized(var2){}
  175.  
  176.          try {
  177.             HoldJavaEnvironment.ResetNoCallThreadId(getJScriptThreadId());
  178.             pWaitForRTI = var5;
  179.          } catch (Throwable var4) {
  180.             throw var4;
  181.          }
  182.       }
  183.  
  184.    }
  185.  
  186.    static {
  187.       pScheduler = new JScriptScheduler();
  188.       pTaskQueue = new JSbxQueue((Object)null);
  189.       pRunningQueue = new JSbxQueue((Object)null);
  190.       pRunThread = new Thread(pScheduler, "(JavaScript Task-Scheduler)");
  191.       pRunThread.start();
  192.       pActTask = null;
  193.       pWaitForRTI = null;
  194.    }
  195. }
  196.