用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;
}