/extlibs/SFML/src/SFML/System/Thread.cpp
C++ | 110 lines | 53 code | 24 blank | 33 comment | 3 complexity | 1dd8acf76b371ee5bfae00d6a69790ed MD5 | raw file
1//////////////////////////////////////////////////////////// 2// 3// SFML - Simple and Fast Multimedia Library 4// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) 5// 6// This software is provided 'as-is', without any express or implied warranty. 7// In no event will the authors be held liable for any damages arising from the use of this software. 8// 9// Permission is granted to anyone to use this software for any purpose, 10// including commercial applications, and to alter it and redistribute it freely, 11// subject to the following restrictions: 12// 13// 1. The origin of this software must not be misrepresented; 14// you must not claim that you wrote the original software. 15// If you use this software in a product, an acknowledgment 16// in the product documentation would be appreciated but is not required. 17// 18// 2. Altered source versions must be plainly marked as such, 19// and must not be misrepresented as being the original software. 20// 21// 3. This notice may not be removed or altered from any source distribution. 22// 23//////////////////////////////////////////////////////////// 24 25//////////////////////////////////////////////////////////// 26// Headers 27//////////////////////////////////////////////////////////// 28#include <SFML/System/Thread.hpp> 29 30 31#if defined(SFML_SYSTEM_WINDOWS) 32 33 #include <SFML/System/Win32/ThreadImpl.hpp> 34 35#else 36 37 #include <SFML/System/Unix/ThreadImpl.hpp> 38 39#endif 40 41 42namespace sf 43{ 44//////////////////////////////////////////////////////////// 45Thread::Thread() : 46myThreadImpl(NULL), 47myFunction (NULL), 48myUserData (NULL) 49{ 50 51} 52 53 54//////////////////////////////////////////////////////////// 55Thread::Thread(Thread::FuncType function, void* userData) : 56myThreadImpl(NULL), 57myFunction (function), 58myUserData (userData) 59{ 60 61} 62 63 64//////////////////////////////////////////////////////////// 65Thread::~Thread() 66{ 67 Wait(); 68} 69 70 71//////////////////////////////////////////////////////////// 72void Thread::Launch() 73{ 74 Wait(); 75 myThreadImpl = new priv::ThreadImpl(this); 76} 77 78 79//////////////////////////////////////////////////////////// 80void Thread::Wait() 81{ 82 if (myThreadImpl) 83 { 84 myThreadImpl->Wait(); 85 delete myThreadImpl; 86 myThreadImpl = NULL; 87 } 88} 89 90 91//////////////////////////////////////////////////////////// 92void Thread::Terminate() 93{ 94 if (myThreadImpl) 95 { 96 myThreadImpl->Terminate(); 97 delete myThreadImpl; 98 myThreadImpl = NULL; 99 } 100} 101 102 103//////////////////////////////////////////////////////////// 104void Thread::Run() 105{ 106 if (myFunction) 107 myFunction(myUserData); 108} 109 110} // namespace sf