【问题标题】:Win 8 Metro mode: WaitForSingleObjectEx failedWin 8 Metro 模式:WaitForSingleObjectEx 失败
【发布时间】:2012-07-18 17:14:45
【问题描述】:

我正在尝试像这样在 Metro 模式下实现类似睡眠(毫秒)的行为

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 也支持 Metro 模式,但系统错误代码说只有桌面模式……这很奇怪! 0 表示Success 但它没有! 谁能帮助我至少GetLastError ..我知道这是一个简单的实现,我也为桌面模式做了类似的事情..想知道有什么问题!

>>>>>>>>> 编辑

不确定是否使用 GetLastError,但只需使用

实现Sleep
WaitForSingleObjectEx(GetCurrentThread(), ms, FALSE);

【问题讨论】:

    标签: events windows-runtime sleep getlasterror waitforsingleobject


    【解决方案1】:

    您可以使用在 WinStore 应用程序中工作的 C++ sleep_for

    #include <thread>
    #include <chrono>
    
    std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多