#include "ThreadWrapperBase.h" #include "NativeExceptionBase.h" #using <System.Windows.Forms.dll> namespace ThreadManager { ThreadWrapperBase::ThreadWrapperBase() { actionQueue = gcnew Queue<ActionItem^>(); actionQueueLock = gcnew Object(); doActionsLock = gcnew Object(); terminated = gcnew ManualResetEvent(false); waitLock = gcnew ManualResetEvent(false); delegateDictionary = gcnew Dictionary<String^, Delegate^>(); CreateThread(); } void ThreadWrapperBase::StartThread(Object^ startArg) { thread->Start(startArg); } void ThreadWrapperBase::TerminateThread() { // set "terminated" to indicate we want to finish the thread if (terminated) terminated->Set(); waitLock->Set();
//--------------------------------------------------------------------------- // DiskAsyncResult Constructor (internal) // // Arguments: // // handle - Open DiskSafeHandle instance // state - IAsyncResult state object DiskAsyncResult::DiskAsyncResult(DiskSafeHandle^ handle, Object^ state) : m_handle(handle), m_state(state), m_completed(false) { // Can't check this // if(handle == nullptr) throw gcnew ArgumentNullException("handle"); m_event = gcnew ManualResetEvent(false); m_overlapped = gcnew Overlapped(0, 0, m_event->SafeWaitHandle->DangerousGetHandle(), this); m_pNativeOverlapped = m_overlapped->Pack(nullptr, nullptr); } //--------------------------------------------------------------------------- // DiskAsyncResult Finalizer DiskAsyncResult::!DiskAsyncResult() { if(m_pNativeOverlapped) Overlapped::Free(m_pNativeOverlapped); m_pNativeOverlapped = NULL; } //--------------------------------------------------------------------------- // DiskAsyncResult::EndOperation (internal, static)