1// 2// This file is part of the aMule Project. 3// 4// Copyright (c) 2008-2011 aMule Team ( admin@amule.org / http://www.amule.org ) 5// 6// Any parts of this program derived from the xMule, lMule or eMule project, 7// or contributed by third-party developers are copyrighted by their 8// respective authors. 9// 10// This program is free software; you can redistribute it and/or modify 11// it under the terms of the GNU General Public License as published by 12// the Free Software Foundation; either version 2 of the License, or 13// (at your option) any later version. 14// 15// This program is distributed in the hope that it will be useful, 16// but WITHOUT ANY WARRANTY; without even the implied warranty of 17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18// GNU General Public License for more details. 19// 20// You should have received a copy of the GNU General Public License 21// along with this program; if not, write to the Free Software 22// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 23// 24 25#ifndef MULETHREAD_H 26#define MULETHREAD_H 27 28#include <wx/thread.h> 29 30 31class CMuleThread : public wxThread 32{ 33public: 34 //! @see wxThread::wxThread 35 CMuleThread(wxThreadKind kind = wxTHREAD_DETACHED) 36 : wxThread(kind), 37 m_stop(false) {} 38 39 /** 40 * Stops the thread. 41 * 42 * For detached threads, this function is equivalent 43 * to Delete, but is also useable for joinable threads, 44 * where Delete should not be used, due to crashes 45 * experienced in that case. In the case of joinable 46 * threads, Wait is called rather than Delete. 47 * 48 * @see wxThread::Delete 49 */ 50 void Stop() 51 { 52 m_stop = true; 53 if (IsDetached()) { 54 Delete(); 55 } else { 56 Wait(); 57 } 58 } 59 60 //! Returns true if Delete or Stop has been called. 61 virtual bool TestDestroy() 62 { 63 // m_stop is checked last, because some functionality is 64 // dependant upon wxThread::TestDestroy() being called, 65 // for instance Pause(). 66 return wxThread::TestDestroy() || m_stop; 67 } 68private: 69 //! Is set if Stop is called. 70 bool m_stop; 71}; 72 73#endif 74