ITgg123 2021-11-16 14:55 采纳率: 0%
浏览 13

打印机用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;
    }


  • 写回答

1条回答 默认 最新

  • 赵4老师 2023-01-30 09:18
    关注

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

    评论

报告相同问题?

问题事件

  • 创建了问题 11月16日

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号