このようなメトロモードで Sleep(msec) 動作のようなものを実装しようとしています
void win8_metro_mode_sleep(unsigned long long ms)
{
HANDLE hEvent;
DWORD ret;
DWORD err;
DWORD msec = ms;
print_on_text_box("\nMSEC: ");
print_on_text_box(((DWORD)ms).ToString());
hEvent =CreateEventEx(NULL,L"sleep_event",NULL,EVENT_MODIFY_STATE);
/*OpenEvent(NULL, TRUE, L"sleep_event");
if(hEvent == NULL){
print_on_text_box(">>>OpenEvent failed<<<\n");
}*/
/*if(ResetEvent(hEvent) == 0){
print_on_text_box(">>>ResetEvent failed!<<<\n");
}*/
ret = WaitForSingleObjectEx(hEvent, msec, true);
if(ret == WAIT_TIMEOUT) {
print_on_text_box("Sleep Success!\n");
}
else if(ret == WAIT_OBJECT_0){
print_on_text_box("WaitForSingleObjectEx, failed ...Err: The state of the specified object is signaled.\n");
}
else if(ret == WAIT_IO_COMPLETION){
print_on_text_box("WaitForSingleObjectEx, failed ...Err: WAIT_IO_COMPLETION.\n");
}
else if(ret == WAIT_FAILED){
print_on_text_box(" WaitForSingleObjectEx, failed ...Err: WAIT_FAILED: -->> ");
err = GetLastError();
//FormatMessage(
// FORMAT_MESSAGE_ALLOCATE_BUFFER |
// FORMAT_MESSAGE_FROM_SYSTEM |
// FORMAT_MESSAGE_IGNORE_INSERTS,
// NULL,
// err,
// MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
// (LPTSTR) &lpMsgBuf,
// 0, NULL );
textbox_test_result->Text = textbox_test_result->Text + err.ToString() +" <<< \n";
}
CloseHandle(hEvent);
}
それは出力します: WaitForSingleObjectEx, failed ...Err: WAIT_FAILED
: -->> 0 Windows のドキュメントにはGetLastError
メトロ モードもサポートされていると書かれていますが、システム エラー コードにはデスクトップ モードしかないと書かれています ... 変です! 0は意味しますSuccess
が、そうではありませんでした!誰でも少なくとも私を助けることができますGetLastError
..これは単純な実装であることを知っています.デスクトップモードでもこのようなことをしました..何が悪いのか疑問に思っています!
>>>>>>>>> 編集 <<<<<<<<
GetLastError についてはわかりませんがSleep
、
WaitForSingleObjectEx(GetCurrentThread(), ms, FALSE);