Здравствуйте!
столкнулся со следующей проблемой:
при вызове StartDocPrinter/EndDocPrinter поток из которого идет вызов
блокируется, в случае если принтер недоступен возврат из функций
занимает довольно таки значительное время...в связи с чем
непосредственно сам вопрос: можно ли как-то установить тайм-аут
на выполнение StartDocPrinter/EndDocPrinter?
собственно сам текст функции печати
bool printString(const char *docname,const char *printer,const char *string,size_t sztask){
if( docname == NULL || strlen(docname) == 0 || printer == NULL || strlen(printer) == 0 || string == NULL ) return false;
if( strlen(string) == 0 ) return true;
HANDLE hPrinter = NULL;
DOC_INFO_1 DocInfo;
DWORD dwJob = 0L,dwBytesWritten = 0L,dwSzPrinted = 0L;
size_t npos = 0;
std::string stask = std::string(" ") + string;
if( !OpenPrinter( (LPSTR)printer, &hPrinter, NULL ) ) return false;
DocInfo.pDocName = (LPSTR)docname;
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = (LPSTR)("RAW");
dwSzPrinted = 0;
dwJob = StartDocPrinter(hPrinter, 1, (LPBYTE)&DocInfo);
if( dwJob > 0 ){
if( StartPagePrinter(hPrinter) ){
while( npos < sztask ){
if( npos+512 < sztask )
if( !WritePrinter(hPrinter,(LPBYTE)stask.substr(npos,512).c_str(),512,&dwBytesWritten) ) return false;
else
if( !WritePrinter(hPrinter,(LPBYTE)stask.substr(npos,sztask-npos).c_str(),sztask-npos,&dwBytesWritten) ) return false;
npos += 512;
dwSzPrinted += dwBytesWritten;
}
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
}else
return false;
ClosePrinter(hPrinter);
return dwSzPrinted == sztask;
};