/*********************************************************************/ /* */ /* 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(); } } }