打印机用WriteFile函数阻塞,显示打印机缺纸提示框有问题

用WriteFile函数在主程序中打印字符串,如果遇到缺纸的情况,WriteFile函数会阻塞,主程序会卡住。现在想用线程去执行WriteFile函数,主程序写一个标志位,进去之前置为false,如果WriteFile函数能正常返回则置为true,表示打印机正常工作,如果线程的WriteFile函数阻塞,等待几秒后返回主线程,根据标志位显示警告框。目前就是打印机缺纸后,主程序目前不会显示警告框,要等到下一次点击打印之后,才会显示提示框,打印字符串是一个循环的过程,求解为什么已经缺纸了,主程序为什么没有进打印机缺纸的判断,按道理说主程序不应该阻塞的啊?

    flag = false;    //flag为全局变量

    HANDLE m_Thread = CreateThread(NULL,0,ThreadFuncWriteFile,(LPVOID)&data,0,NULL);
    DWORD dw = WaitForSingleObject(m_Thread,2000);    //等待线程两秒后返回
    CloseHandle(m_Thread);

    if( flag == false)
    {
       MessageBox(0,"打印机缺纸,请及时更换!!!","警告",MB_OK|MB_ICONEXCLAMATION);
    }


    DWORD WINAPI ThreadFuncWriteFile(LPVOID lpparameter)    //线程函数
    {
        MYDATA* pmd = (MYDATA*)lpparameter;    //传入的参数
        EnterCriticalSection(&cs);
        flag = WriteFile(pmd->handle,pmd->pstring,pmd->length,pmd->stringlong,NULL);
        LeaveCriticalSection(&cs);
        return 0;
    }


 

阻塞是阻塞到WriteFile中不返回,当然无法通过将其返回值赋值给flag判断了。
应该使用
判断调用WriteFile一定时长后不返回
判断当前弹出了打印机缺纸对话框
或改用WriteFileEx