Package charva.awt

Source Code of charva.awt.SyncThread

/* class SyncThread
*
* Copyright (C) 2001  R M Pitman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package charva.awt;

import charva.awt.event.AWTEvent;
import charva.awt.event.GarbageCollectionEvent;
import charva.awt.event.SyncEvent;

/**
* The purpose of this class it to speed up redrawing of the screen
* after the closing (or opening) of a window and the subsequent opening
* of a new window, by delaying the calling of Toolkit.sync() until
* the new window has had a chance to be drawn.<p>
*
* Note that it is not _guaranteed_ that the new window will be drawn in
* time, but it probably will be.<p>
*
* This thread loops forever, reading SyncEvents off the SyncQueue
* (a SyncEvent is generated whenever a window closes and the underlying
* windows have been redrawn).
* After reading the event off the queue, this thread sleeps for 50 msec
* and then puts the event onto the EventQueue, from which it will be
* picked up by the active window. If there are more events on the SyncQueue
* when the thread awakes, the SyncQueue is drained.<p>
*
* This thread also processes GarbageCollectionEvents; when it receives
* a GarbageCollectionEvent, it calls System.gc() (after waiting 50 msec
* to give the AWT event-handler time to complete).
*/
class SyncThread
    extends Thread
{
    SyncThread(SyncQueue syncQueue_, EventQueue eventQueue_) {
  _syncQueue = syncQueue_;
  _eventQueue = eventQueue_;
    }

    public void run() {
  for (;;) {
      AWTEvent evt = _syncQueue.getNextEvent();
        // Sync thread exit point
        if(evt == null) break;
      try {
    sleep(50);
      }
      catch (InterruptedException e) {
    System.err.println("SyncThread: sleep interrupted!");
      }

      if (evt instanceof SyncEvent) {
    _eventQueue.postEvent(evt);

    /* If there any more SyncEvents on the queue, drain the queue;
     * there is no point in putting more than one SyncEvent on the
     * EventQueue.
     */
    while (_syncQueue.isEmpty() == false) {
        if (_syncQueue.getNextEvent() instanceof GarbageCollectionEvent) {
      System.gc();
      break;
        }
    }
      } /* //LS
      else
    System.gc();  // it was a GarbageCollectionEvent
        */
  }
    }

    private SyncQueue _syncQueue;
    private EventQueue _eventQueue;
}
TOP

Related Classes of charva.awt.SyncThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.