/* Copyright (C) 2009 Nasca Octavian Paul Author: Nasca Octavian Paul This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. This program 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 General Public License (version 2) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "Thread.h" #include "globals.h" #ifdef WINDOWS DWORD WINAPI thread_function( LPVOID arg ) { #else void *thread_function(void *arg){ #endif Thread *thr=(Thread *) arg; thr->run(); thr->stopped=true; thr->running=false; return 0; }; Thread::Thread(){ running=false; stopnow=false; stopped=false; }; Thread::~Thread(){ stop(); }; bool Thread::start(){ if (running) return false; #ifdef WINDOWS hThread=CreateThread(NULL,0,thread_function,this,0,NULL); #else if (pthread_create(&thread,NULL,thread_function,this)!=0)return false; #endif running=true; return true; }; void Thread::stop(){ if (!running) return; running=false; stopped=false; int maxwait=1000; stopnow=true; while(!stopped){ sleep(10); }; }; bool Thread::is_running(){ return running; };