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 sourceSteve Fearson The Source (Making Invisible Thread & Wax)source30ThreadMXBeanMatrix3?pp sourceThreadPoolExecutor AbortPolicyarm biquad ?scade ?1 ?st q31? sourcearm conv ?2? sourcearm mat mult q15? sourceThreadSamples csproj FileListAbsoluteResource 8inl sourcearm fir lattice init q31? sourcearm fir ?cimate ?st q15? sourceThreadPolicyValuewięcej podobnych podstron