Таймаут и StartDocPrinter
От: trkeast Россия  
Дата: 28.07.09 16:19
Оценка:
Здравствуйте!

столкнулся со следующей проблемой:
при вызове 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;
};
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.