⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ilmthread.h

📁 image converter source code
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2005, Industrial Light & Magic, a division of Lucas// Digital Ltd. LLC// // All rights reserved.// // Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:// *       Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// *       Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following disclaimer// in the documentation and/or other materials provided with the// distribution.// *       Neither the name of Industrial Light & Magic nor the names of// its contributors may be used to endorse or promote products derived// from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef INCLUDED_ILM_THREAD_H#define INCLUDED_ILM_THREAD_H//-----------------------------------------------------------------------------////	class Thread////	Class Thread is a portable interface to a system-dependent thread//	primitive.  In order to make a thread actually do something useful,//	you must derive a subclass from class Thread and implement the//	run() function.  If the operating system supports threading then//	the run() function will be executed int a new thread.////	The actual creation of the thread is done by the start() routine//	which then calls the run() function.  In general the start()//	routine should be called from the constructor of the derived class.////	The base-class thread destructor will join/destroy the thread.////	IMPORTANT: Due to the mechanisms that encapsulate the low-level//	threading primitives in a C++ class there is a race condition//	with code resembling the following:////	    {//		WorkerThread myThread;//	    } // myThread goes out of scope, is destroyed//	      // and the thread is joined////	The race is between the parent thread joining the child thread//	in the destructor of myThread, and the run() function in the//	child thread.  If the destructor gets executed first then run()//	will be called with an invalid "this" pointer.////	This issue can be fixed by using a Semaphore to keep track of//	whether the run() function has already been called.  You can//	include a Semaphore member variable within your derived class//	which you post() on in the run() function, and wait() on in the//	destructor before the thread is joined.  Alternatively you could//	do something like this:////	    Semaphore runStarted;////	    void WorkerThread::run ()//	    {//		runStarted.post()//		// do some work//		...//	    }////	    {//		WorkerThread myThread;//		runStarted.wait ();    // ensure that we have started//				       // the run function//	    } // myThread goes out of scope, is destroyed//	      // and the thread is joined////-----------------------------------------------------------------------------#include "IlmBaseConfig.h"#if defined _WIN32 || defined _WIN64    #ifdef NOMINMAX        #undef NOMINMAX    #endif    #define NOMINMAX    #include <windows.h>    #include <process.h>#elif HAVE_PTHREAD    #include <pthread.h>#endif#if defined(OPENEXR_DLL) && !defined(ZENO_STATIC)    #ifdef ILMTHREAD_EXPORTS	#define ILMTHREAD_EXPORT __declspec(dllexport)    #else	#define ILMTHREAD_EXPORT __declspec(dllimport)    #endif#else    #define ILMTHREAD_EXPORT #endifnamespace IlmThread {//// Query function to determine if the current platform supports// threads AND this library was compiled with threading enabled.//ILMTHREAD_EXPORT bool supportsThreads ();class ILMTHREAD_EXPORT Thread{  public:    Thread ();    virtual ~Thread ();    void		start ();    virtual void	run () = 0;      private:    #if defined _WIN32 || defined _WIN64	HANDLE _thread;    #elif HAVE_PTHREAD	pthread_t _thread;    #endif    void operator = (const Thread& t);	// not implemented    Thread (const Thread& t);		// not implemented};} // namespace IlmThread#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -