Table of Contents

include/AK/Tools/Common/AkSyncCaller.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002 The content of this file includes portions of the AUDIOKINETIC Wwise Technology
00003 released in source code form as part of the SDK installer package.
00004 
00005 Commercial License Usage
00006 
00007 Licensees holding valid commercial licenses to the AUDIOKINETIC Wwise Technology
00008 may use this file in accordance with the end user license agreement provided 
00009 with the software or, alternatively, in accordance with the terms contained in a
00010 written agreement between you and Audiokinetic Inc.
00011 
00012 Apache License Usage
00013 
00014 Alternatively, this file may be used under the Apache License, Version 2.0 (the 
00015 "Apache License"); you may not use this file except in compliance with the 
00016 Apache License. You may obtain a copy of the Apache License at 
00017 http://www.apache.org/licenses/LICENSE-2.0.
00018 
00019 Unless required by applicable law or agreed to in writing, software distributed
00020 under the Apache License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
00021 OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for
00022 the specific language governing permissions and limitations under the License.
00023 
00024   Version: <VERSION>  Build: <BUILDNUMBER>
00025   Copyright (c) <COPYRIGHTYEAR> Audiokinetic Inc.
00026 *******************************************************************************/
00027 
00028 // AkSyncLoader.h
00029 
00030 /// \file 
00031 /// Class for synchronous calls of asynchronous models
00032 
00033 #ifndef _AK_SYNC_CALLER_H_
00034 #define _AK_SYNC_CALLER_H_
00035 
00036 #include <AK/Tools/Common/AkPlatformFuncs.h>
00037 
00038 namespace AK
00039 {
00040     namespace SoundEngine
00041     {
00042         /// AkSyncLoader: Init to create a sync event, call the asynchronous method, passing
00043         /// it the address of this object as the cookie, then call Wait. 
00044         class AkSyncCaller
00045         {
00046         public:
00047             /// Initialize.
00048             AKRESULT Init()
00049             {
00050                 if ( AKPLATFORM::AkCreateEvent( m_hEvent ) != AK_Success )
00051                 {
00052                     AKASSERT( !"Could not create synchronization event" );
00053                     return AK_Fail;
00054                 }
00055                 return AK_Success;
00056             }
00057 
00058             /// Wait until the async function calls its callback.
00059             AKRESULT Wait( AKRESULT in_eResult )
00060             {
00061                 if ( in_eResult != AK_Success )
00062                 {
00063                     AKPLATFORM::AkDestroyEvent( m_hEvent );
00064                     return in_eResult;
00065                 }
00066 
00067                 // Task queueing successful. Block until completion.
00068                 AKPLATFORM::AkWaitForEvent( m_hEvent );
00069                 AKPLATFORM::AkDestroyEvent( m_hEvent );
00070 
00071                 return m_eResult;
00072             }
00073 
00074             /// Call this from callback to release blocked thread.
00075             inline void Done() { AKPLATFORM::AkSignalEvent( m_hEvent ); }
00076 
00077             AKRESULT    m_eResult;  ///< Operation result
00078 
00079         private:
00080             AkEvent     m_hEvent;   ///< Sync event
00081         };
00082     }
00083 }
00084 
00085 #endif // _AK_SYNC_CALLER_H_