timeout в ReadFile
От: ARDCpp Россия  
Дата: 10.12.08 11:49
Оценка:
Привет.

Есть некая функция, в теле которой проиходит подключение к COM-порту и считывание данных с устройства, подключенного к этому порту.
Некоторая часть кода:
DWORD CheckDevice(int PortNum)
{
    char port[16] = {0};
    sprintf(port, "\\\\.\\COM%d", PortNum);
    DWORD result;
    DWORD size = 512, n = 0;
    char * buffer = new char[size];
    memset(buffer, 0, size);

        // ..........

    hPort  = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if(hPort)
    {
        ReadFile (hPort, buffer, size, &n, NULL);

                //..............
    }
    else
    {
        result << INVALID_HANDLE_VALUE;
    }
        delete [] buffer;
    return result;
}

Сие мега устройство, к которому происходит коннект, может сильно тупить и иногода ReadFile зависает на неопределенный период.
Можно ли установить таймаут, аля как в сокетах (если данные не пришли за время t, то идем дальше, а не висим 1,5 часа)?


11.12.08 00:36: Перенесено модератором из 'C/C++' — Кодт
Re: timeout в ReadFile
От: Sergej Pupykin  
Дата: 10.12.08 12:01
Оценка: +1
ARDCpp wrote:
> Сие мега устройство, к которому происходит коннект, может сильно тупить и иногода ReadFile зависает на неопределенный период.
> Можно ли установить таймаут, аля как в сокетах (если данные не пришли за время t, то идем дальше, а не висим 1,5 часа)?

SetCommTimeouts
Posted via RSDN NNTP Server 2.1 beta
Re: timeout в ReadFile
От: Wo-o-olf Россия  
Дата: 10.12.08 12:03
Оценка:
Здравствуйте, ARDCpp, Вы писали:

[кусь]

ARD>Сие мега устройство, к которому происходит коннект, может сильно тупить и иногода ReadFile зависает на неопределенный период.

ARD>Можно ли установить таймаут, аля как в сокетах (если данные не пришли за время t, то идем дальше, а не висим 1,5 часа)?

Может быть лучше ждать события "доступны данные для чтения"?
Как в виндах не помню, но, вроде смотреть в сторону WaitCommEvent и(или?) WaitForMultiple/SingleObject(s)
А там уже выставлять таймауты
Re: timeout в ReadFile
От: WVitek  
Дата: 10.12.08 12:18
Оценка:
Здравствуйте, ARDCpp, Вы писали:

ARD> <...>

ARD>Сие мега устройство, к которому происходит коннект, может сильно тупить и иногода ReadFile зависает на неопределенный период.
ARD>Можно ли установить таймаут, аля как в сокетах (если данные не пришли за время t, то идем дальше, а не висим 1,5 часа)?

SetCommTimeouts(hFile ...
Re: timeout в ReadFile
От: rastoman  
Дата: 11.12.08 09:12
Оценка:
А что, для COM-портов асинхронные операции не работают?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.