Thread 8cpp source


SFML - Simple and Fast Multimedia Library Main Page Namespaces Classes Files File List Thread.cpp00001 00002 // 00003 // SFML - Simple and Fast Multimedia Library 00004 // Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com) 00005 // 00006 // This software is provided 'as-is', without any express or implied warranty. 00007 // In no event will the authors be held liable for any damages arising from the use of this software. 00008 // 00009 // Permission is granted to anyone to use this software for any purpose, 00010 // including commercial applications, and to alter it and redistribute it freely, 00011 // subject to the following restrictions: 00012 // 00013 // 1. The origin of this software must not be misrepresented; 00014 // you must not claim that you wrote the original software. 00015 // If you use this software in a product, an acknowledgment 00016 // in the product documentation would be appreciated but is not required. 00017 // 00018 // 2. Altered source versions must be plainly marked as such, 00019 // and must not be misrepresented as being the original software. 00020 // 00021 // 3. This notice may not be removed or altered from any source distribution. 00022 // 00024 00026 // Headers 00028 #include <SFML/System/Win32/Thread.hpp> 00029 #include <process.h> 00030 #include <iostream> 00031 00032 00033 namespace sf 00034 { 00038 Thread::Thread() : 00039 myHandle (NULL), 00040 myFunction(NULL), 00041 myUserData(NULL) 00042 { 00043 00044 } 00045 00046 00050 Thread::Thread(Thread::FuncType Function, void* UserData) : 00051 myHandle (NULL), 00052 myFunction(Function), 00053 myUserData(UserData) 00054 { 00055 00056 } 00057 00058 00062 Thread::~Thread() 00063 { 00064 // Wait for the thread to finish before destroying the instance 00065 Wait(); 00066 } 00067 00068 00072 void Thread::Launch() 00073 { 00074 // Wait for the thread to finish, in case it was already running 00075 Wait(); 00076 00077 // Create the thread 00078 myHandle = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, &Thread::ThreadFunc, this, 0, NULL)); 00079 00080 // Error ? 00081 if (myHandle == NULL) 00082 std::cerr << "Failed to create thread" << std::endl; 00083 } 00084 00085 00089 void Thread::Wait() 00090 { 00091 if (myHandle) 00092 { 00093 // Wait for the thread to finish, no timeout 00094 WaitForSingleObject(myHandle, INFINITE); 00095 00096 // Don't forget to close the thread handle (__endthreadex doesn't do it) 00097 CloseHandle(myHandle); 00098 myHandle = NULL; 00099 } 00100 } 00101 00102 00109 void Thread::Terminate() 00110 { 00111 if (myHandle) 00112 { 00113 TerminateThread(myHandle, 0); 00114 myHandle = NULL; 00115 } 00116 } 00117 00118 00122 void Thread::Run() 00123 { 00124 if (myFunction) 00125 myFunction(myUserData); 00126 } 00127 00128 00132 unsigned int __stdcall Thread::ThreadFunc(void* UserData) 00133 { 00134 // The Thread instance is stored in the user data 00135 Thread* ThreadInstance = reinterpret_cast<Thread*>(UserData); 00136 00137 // Forward to the instance 00138 ThreadInstance->Run(); 00139 00140 // Optional, but it is cleaner 00141 _endthreadex(0); 00142 00143 return 0; 00144 } 00145 00146 } // namespace sf  ::  Copyright © 2007-2008 Laurent Gomila, all rights reserved  ::  Documentation generated by doxygen 1.5.2  :: 

Wyszukiwarka

Podobne podstrony:
Thread 8hpp source
Steve Fearson The Source (Making Invisible Thread & Wax)
source30
ThreadMXBean
Matrix3?pp source
ThreadPoolExecutor AbortPolicy
arm biquad ?scade ?1 ?st q31? source
arm conv ?2? source
arm mat mult q15? source
ThreadSamples csproj FileListAbsolute
Resource 8inl source
arm fir lattice init q31? source
arm fir ?cimate ?st q15? source
ThreadPolicyValue

więcej podobnych podstron