wasCSharpSQLite – Rev 1
?pathlinks?
/*
* IdleHandler.java --
*
* The API for defining idle event handler.
*
* Copyright (c) 1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
* Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart
*
* RCS @(#) $Id: IdleHandler.java,v 1.1.1.1 1998/10/14 21:09:21 cvsadmin Exp $
*
*/
using System;
namespace tcl.lang
{
/*
* This abstract class is used to define idle handlers.
*/
public abstract class IdleHandler
{
/*
* Back pointer to the notifier that will fire this idle.
*/
internal Notifier notifier;
/*
* True if the cancel() method has been called.
*/
internal bool isCancelled;
/*
* Used to distinguish older idle handlers from recently-created ones.
*/
internal int generation;
public IdleHandler( Notifier n )
{
notifier = (Notifier)n;
isCancelled = false;
lock ( notifier )
{
notifier.idleList.Add( this );
generation = notifier.idleGeneration;
if ( System.Threading.Thread.CurrentThread != notifier.primaryThread )
{
System.Threading.Monitor.PulseAll( notifier );
}
}
}
public void cancel()
{
lock ( this )
{
if ( isCancelled )
{
return;
}
isCancelled = true;
lock ( notifier )
{
for ( int i = 0; i < notifier.idleList.Count; i++ )
{
if ( notifier.idleList[i] == this )
{
notifier.idleList.RemoveAt( i );
/*
* We can return now because the same idle handler can
* be registered only once in the list of idles.
*/
return;
}
}
}
}
}
internal int invoke()
{
lock ( this )
{
/*
* The idle handler may be cancelled after it was registered in
* the notifier. Check the isCancelled field to make sure it's not
* cancelled.
*/
if ( !isCancelled )
{
processIdleEvent();
return 1;
}
else
{
return 0;
}
}
}
abstract public void processIdleEvent();
} // end IdleHandler
}