HANDLES
最初のものnextColorFrameEvent
はイベントハンドラーで、2番目のものはストリームハンドラーです。これらは、次のコードで初期化されています。
nextColorFrameEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
hr = nui->NuiImageStreamOpen(
NUI_IMAGE_TYPE_COLOR,
NUI_IMAGE_RESOLUTION_640x480,
0,
2,
nextColorFrameEvent,
&videoStreamHandle);
同時にエラーを作成するのではなく、破壊時にそれらを適切に処理したいと考えています。イニシャライザが呼び出されない場合があるため、ソフトウェアが終了しても両方の HANDLE が NULL のままです。そのため、最初に HANDLE が適切に初期化されているかどうかなどを確認し、そうであれば閉じたいと考えています。このために、次のコードを手に入れました。
if (nextColorFrameEvent && nextColorFrameEvent != INVALID_HANDLE_VALUE)CloseHandle(nextColorFrameEvent);
#ifdef QT_DEBUG
DWORD error = GetLastError();
qDebug()<< error;
#endif
if (videoStreamHandle && videoStreamHandle != INVALID_HANDLE_VALUE)CloseHandle(videoStreamHandle);
#ifdef QT_DEBUG
error = GetLastError();
qDebug()<< error;
#endif
しかし、これは明らかに間違っています。イニシャライザを実行せずにソフトウェアを閉じると、このコードが実行されて 6 が返されます。
Starting C:\...\Qt\build-simpleKinectController-Desktop_Qt_5_0_2_MSVC2012_64bit-Debug\debug\simpleKinectController...
6
6
C:\...\Qt\build-simpleKinectController-Desktop_Qt_5_0_2_MSVC2012_64bit-Debug\debug\simpleKinectController exited with code 0
つまり:
ERROR_INVALID_HANDLE 6 (0x6) ハンドルが無効です。これは、テストにもかかわらず closeHandle がとにかく実行されたことを意味します。ハンドルが有効な HANDLE でない場合に閉じないようにするには、どのようなテストを行う必要がありますか?
おまけの質問: イニシャライザを実行すると、このエラーは colorFrameEvent を閉じるときだけ表示されなくなりますが、videoStreamHandle を閉じるときに表示されます。
Starting C:\...\Qt\build-simpleKinectController-Desktop_Qt_5_0_2_MSVC2012_64bit-Debug\debug\simpleKinectController...
0
6
C:\...\Qt\build-simpleKinectController-Desktop_Qt_5_0_2_MSVC2012_64bit-Debug\debug\simpleKinectController exited with code 0
ストリーム ハンドラを閉じるには別の関数が必要ですか?