2 [momiji music component library]
3 ---------------------------------------------------------------------
6 ---------------------------------------------------------------------
7 Copyright (C) 2011 tyiki badwell {miria@users.sourceforge.jp}.
9 This program is free software: you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation, either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.html>.
21 ---------------------------------------------------------------------
25 #include "Momiji.Interop.Winmm.h"
26 #include "Momiji.Core.Winmm.h"
32 DriverCallBack::DriverCallBack(System::Boolean async):
36 System::Console::WriteLine("[{0}]",__FUNCTION__);
39 this->_callBack = InteropServices::GCHandle::Alloc(gcnew Interop::Winmm::DriverCallBack::Delegate(this, &DriverCallBack::DriverCallBackProc));
42 DriverCallBack::~DriverCallBack()
45 System::Console::WriteLine("[{0}]",__FUNCTION__);
47 this->!DriverCallBack();
50 DriverCallBack::!DriverCallBack()
53 System::Console::WriteLine("[{0}]",__FUNCTION__);
55 if (this->_callBack.IsAllocated)
57 this->_callBack.Free();
61 Interop::Winmm::DriverCallBack::Delegate^ DriverCallBack::GetDriverCallBackProc()
63 return safe_cast<Interop::Winmm::DriverCallBack::Delegate^>(this->_callBack.Target);
66 void DriverCallBack::DriverCallBackProc(
68 Interop::Winmm::DriverCallBack::MM_EXT_WINDOW_MESSAGE uMsg,
69 System::IntPtr dwUser,
75 System::Console::WriteLine("[{0}] [{1,8:X}][{2,8:X}][{3,8:X}][{4,8:X}][{5,8:X}]", __FUNCTION__, hdrvr, uMsg, dwUser, dw1, dw2);
79 auto params = gcnew Interop::Winmm::DriverCallBack::DriverEventArgs();
80 params->hdrvr = hdrvr;
82 params->dwUser = dwUser;
88 System::Threading::ThreadPool::QueueUserWorkItem(
89 gcnew System::Threading::WaitCallback(this, &DriverCallBack::DoEvent),
95 this->DoEvent(params);
98 catch(System::Exception^ e)
101 System::Console::WriteLine("[{0}] コールバック中のエラー[{1}]", __FUNCTION__, e->ToString());
105 System::Console::WriteLine("[{0}] OUT", __FUNCTION__);
109 void DriverCallBack::DoEvent(
110 System::Object^ stateInfo
114 System::Console::WriteLine("[{0}] [{1}] start", __FUNCTION__, System::Threading::Thread::CurrentThread->GetHashCode());
117 auto params = safe_cast<Interop::Winmm::DriverCallBack::DriverEventArgs^>(stateInfo);
120 this->OnEvent(this, params);
122 catch(System::Exception^ e)
125 System::Console::WriteLine("[{0}] コールバック中のエラー[{1}]", __FUNCTION__, e->ToString());
130 System::Console::WriteLine("[{0}] [{1}] end", __FUNCTION__, System::Threading::Thread::CurrentThread->GetHashCode());
138 TimerCallBack::TimerCallBack(System::Boolean async):
142 System::Console::WriteLine("[{0}]",__FUNCTION__);
145 this->_callBack = InteropServices::GCHandle::Alloc(gcnew Interop::Winmm::TimerCallBack::Delegate(this, &TimerCallBack::TimerCallBackProc));
148 TimerCallBack::~TimerCallBack()
151 System::Console::WriteLine("[{0}]",__FUNCTION__);
153 this->!TimerCallBack();
156 TimerCallBack::!TimerCallBack()
159 System::Console::WriteLine("[{0}]",__FUNCTION__);
161 if (this->_callBack.IsAllocated)
163 this->_callBack.Free();
167 Interop::Winmm::TimerCallBack::Delegate^ TimerCallBack::GetTimerCallBackProc()
169 return safe_cast<Interop::Winmm::TimerCallBack::Delegate^>(this->_callBack.Target);
172 void TimerCallBack::TimerCallBackProc(
173 System::UInt32 uTimerID,
175 System::IntPtr dwUser,
181 System::Console::WriteLine("[{0}] [{1,8:X}][{2,8:X}][{3,8:X}][{4,8:X}][{5,8:X}]", __FUNCTION__, uTimerID, uMsg, dwUser, dw1, dw2);
185 auto params = gcnew Interop::Winmm::TimerCallBack::TimerEventArgs();
186 params->uTimerID = uTimerID;
188 params->dwUser = dwUser;
194 System::Threading::ThreadPool::QueueUserWorkItem(
195 gcnew System::Threading::WaitCallback(this, &TimerCallBack::DoEvent),
201 this->DoEvent(params);
204 catch(System::Exception^ e)
207 System::Console::WriteLine("[{0}] コールバック中のエラー[{1}]", __FUNCTION__, e->ToString());
211 System::Console::WriteLine("[{0}] OUT", __FUNCTION__);
215 void TimerCallBack::DoEvent(
216 System::Object^ stateInfo
220 System::Console::WriteLine("[{0}] [{1}] start", __FUNCTION__, System::Threading::Thread::CurrentThread->GetHashCode());
223 auto params = safe_cast<Interop::Winmm::TimerCallBack::TimerEventArgs^>(stateInfo);
226 this->OnEvent(this, params);
228 catch(System::Exception^ e)
230 System::Console::WriteLine("[{0}] コールバック中のエラー[{1}]", __FUNCTION__, e->ToString());
234 System::Console::WriteLine("[{0}] [{1}] end", __FUNCTION__, System::Threading::Thread::CurrentThread->GetHashCode());