/*********************************************************************/
/* */
/* AgentService Framework */
/* www.agentservice.it */
/* */
/* Copyright (C) 2007 l.i.d.o. - DIST, University of Genoa, Italy */
/* GNU Lesser General Public License */
/* */
/* 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, */
/* version 2.1 of the License. */
/* */
/* 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. */
/* */
/*********************************************************************/
using System;
namespace AgentService.Agent.Behaviour
{
///
/// The delegate that manages the abort event
///
public delegate void BehaviourThreadDelegate();
///
/// BehaviourThreadUnit class. Thread class internally used by the behaviour object to manage threads created whithin behaviour objects
///
[Serializable]
public class BehaviourThreadUnit
{
///
/// The thread managed object
///
System.Threading.Thread thread;
///
/// The event thrown by the Thread.Abort() operation
///
public event BehaviourThreadDelegate AbortEvent;
///
/// Constructs a BehaviourThreadUnit object with the ThreadStart delegate and a finalize delegate invoked with the abort event
///
/// the method that will execute on the Thread
/// the method that will be called when the thread terminates
public BehaviourThreadUnit(System.Threading.ThreadStart target, BehaviourThreadDelegate finalize)
{
this.thread = new System.Threading.Thread(target);
this.thread.Start();
if (finalize != null)
{
this.AbortEvent += finalize;
}
}
///
/// Terminates the thread's activity and calls all the handlers registered for the finalization
///
public void Finalize()
{
if (this.AbortEvent != null)
{
this.AbortEvent();
}
this.thread.Abort();
}
///
/// Blocks the calling thread until the hosted thread
/// finishes.
///
public void Join()
{
this.thread.Join();
}
}
}