|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Time-Outs
A handle to a communications resource has an associated set of time-out parameters that affect the behavior of read and write operations. Time-outs can cause a ReadFile, ReadFileEx, WriteFile, or WriteFileEx operation to conclude when a time-out interval elapses, even though the specified number of characters have not been read or written. It is not treated as an error when a time-out occurs during a read or write operation (that is, the read or write function's return value indicates success). The count of bytes actually read or written is reported by ReadFile or WriteFile (or by the GetOverlappedResult or FileIOCompletionRoutine function, if the I/O was performed as an overlapped operation).
When an application opens a communications resource, the operating system sets the resource's time-out values to the values in effect when the resource was last used. If the communications resource has never been opened, the operating system sets the time-out values to some default value. In either case, an application should always determine the current time-out values after opening the resource, and then explicitly set them to meet its requirements. To determine the current time-out values of a communications resource, use the GetCommTimeouts function. To change the time-out values, use the SetCommTimeouts function.
Two types of time-outs are enabled by the time-out parameters. An interval time-out occurs when the time between the receipt of any two characters exceeds a specified number of milliseconds. Timing starts when the first character is received and is restarted when each new character is received. A total time-out occurs when the total amount of time consumed by a read operation exceeds a calculated number of milliseconds. Timing starts immediately when the I/O operation begins. Write operations support only total time-outs. Read operations support both interval and total time-outs, which can be used separately or combined.
The time, in milliseconds, of the total time-out period for a read or write operation is calculated by using the multiplier and constant values from the COMMTIMEOUTS structure specified in the GetCommTimeouts or SetCommTimeouts function. The following formula is used:
Timeout = (MULTIPLIER * number_of_bytes) + CONSTANT
Using both a multiplier and a constant enables the total time-out period to vary, depending on the amount of data being requested. An application can use only the constant by setting the multiplier to zero, or use only the multiplier by setting the constant to zero. If both the constant and multiplier are zero, total time-out is not used. If all read time-out parameters are zero, read time-outs are not used, and a read operation is not complete until the requested number of bytes have been read or an error occurs. Similarly, if all write time-out parameters are zero, a write operation is not completed until the requested number of bytes have been written or an error occurs.
If the read interval time-out parameter is the MAXDWORD value and both read total time-out parameters are zero, a read operation is completed immediately after reading whatever characters are available in the input buffer, even if it is empty. This is the same as the ReadComm function in previous versions of Windows. Interval timing forces a read operation to return when there is a lull in reception. A process using interval time-outs can set a fairly short interval parameter, so it can respond quickly to small, isolated bursts of one or a few characters, yet it can still collect large buffers of characters with a single call when data is received in a steady stream.
Time-outs for a write operation can be useful when transmission is blocked by some kind of flow control or when the SetCommBreak function has been called to suspend character transmission. The following table summarizes the behavior of read operations based on the values specified for total and interval time-outs.
Total Interval Behavior 0 0 Returns when the buffer is completely filled. Time-outs are not used. T 0 Returns when the buffer is completely filled or when T milliseconds have elapsed since the beginning of the operation. 0 Y Returns when the buffer is completely filled or when Y milliseconds have elapsed between the receipt of any two characters. Timing does not begin until the first character is received. T Y Returns when the buffer is completely filled or when either type of time-out occurs.
Note, however, that timing is relative to the system controlling the physical device. For a remote device such as a modem, the timing is relative to the server system to which the modem is attached. Any network propagation delay is not factored in. For example, a client application might specify a total time-out that computes to be 500 milliseconds. When 500 milliseconds have elapsed at the server, a time-out error is returned to the client. If there is a 50 milliseconds network propagation delay, the client will not be notified of the time-out until approximately 50 milliseconds after the time-out actually occurred.
The time-out parameters affect the behavior of overlapped read and write operations on a communications device. With overlapped I/O, the ReadFile, WriteFile, ReadFileEx, or WriteFileEx function can return before the operation has been completed. The time-out parameters can determine when the operation has been completed.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Time-Outs
Ручка в ресурс связи имеет связанный набор параметров задержки на которую влияет поведение чтения и пишет действия. Задержки могут заставить ReadFile, ReadFileEx, WriteFile, или действие WriteFileEx, чтобы решаться когда интервал задержки истекает, даже если определенное количество символов не прочитано или написанное. Это не рассмотрено как ошибка когда задержка происходит в течение чтения или действия записи (то есть, чтение или функциональная обратная величина записи указывает успех). Счет байтов действительно прочитанных или написанных выдан ReadFile или WriteFile (или GetOverlappedResult или функцией FileIOCompletionRoutine, если В/В было выполнено как перекрытое действие).
Когда приложение открывает ресурс связи, операционная система устанавливает величины задержки ресурса в величины в силе когда ресурс последний раз был использован. Если ресурс связи никогда не был открыван, операционная система устанавливает величины задержки в некоторое значение по умолчанию. В любом случае, приложение должно всегда определить текущие величины задержки после открытия ресурса, и затем явно установленное он, чтобы удовлетворять свои требования. Для того, чтобы определять текущие величины задержки ресурса связи, используйте функцию GetCommTimeouts. Для того, чтобы изменять величины задержки, используйте функцию SetCommTimeouts.
Два типа задержек приспособлены параметрами задержки. Задержка интервала происходит когда время между получением любых двух символов превышает определенное количество миллисекунд. Синхронизация начинается когда первый символ получен и перезапущен когда каждый новый символ получен. Общая задержка происходит когда общее время поглощенное действием чтения превышает рассчитанное количество миллисекунд. Синхронизация начинается немедленно когда действие В/В начинается. Поддержка действий только общих задержек Записи. Прочитайте действия поддержки как интервал так и составляет задержки, которые могут использоваться отдельно или объединенное.
Время, в течение миллисекунд, общего периода задержки для чтения или действия записи вычислены использованием множителя и константа оценивается из структуры COMMTIMEOUTS определенной в GetCommTimeouts или функция SetCommTimeouts. Следующая формула использована:
Тайм-аут = (МНОЖИТЕЛЬ * number_of_bytes) + КОНСТАНТА
Используя как множитель так и константа позволяет общий период задержки, чтобы менять, в зависимости от суммы данных. Приложение может использовать только константу устанавливая множитель в нуль или использовать только множитель устанавливая константу в нуль. Если как константа так и множитель - нуль, общая задержка не использована. Если все были прочитаны параметры задержки являются нулем, прочитавшим задержки не использованы, и операция чтения не завершенна пока запрошенное количество байтов не прочитано или ошибка происходит. Аналогично, если все параметры задержки записи являются нулем, записывать операция не завершена пока запрошенное количество байтов не записано или ошибка происходит.
Если параметр задержки интервала чтения является величиной MAXDWORD и оба прочитавшее общие параметры задержки являться нулем, операция чтения завершается немедленно после того, как чтение независимо от того какие символы будут доступны в входном буфере, даже если бы он пустой. Это такое же как и функция ReadComm в предшествующих версиях Windows. Интервал, синхронизировавший силы операция чтения, чтобы возвращаться когда есть затишье на приеме. Процесс, использовавший задержки интервала может установить довольно короткий параметр интервала, так что это может среагировать быстро на небольшие, изолированные взрывы одних или нескольких символов, пока это может все еще собрать большие буферы символов с единственным вызовом когда данные получены в устойчивом потоке.
Задержки для записывать операции могут быть полезными когда передача заблокирована некоторым типом управления потока или когда функция SetCommBreak названа, чтобы приостанавливать символьную передачу. Следующая таблица суммирует поведение операций чтения основанного в величинах определенных для общих и задержек интервала.
Общее Поведение Интервала 0 0 Возвратов когда буфер полностью заполнен. Задержки не использованы. T 0 Возврата когда буфер полностью заполнен или когда миллисекунды T прошли с тех пор как начало операции. 0 Возвратов Y когда буфер полностью заполнен или когда миллисекунды Y прошли между получением любых двух символов. Синхронизация не начинается пока первый символ не будет получен. T Y Возвращается когда буфер полностью заполнен или когда также тип задержки происходит.
Примечание, тем не менее, что синхронизация - относительно системы, управляющей физическим устройством. Для дистанционного устройства как например, модем, синхронизация - относительно системы сервера на которой модем приложен. Любая сетевая задержка распространения не отложена в. Например, приложение клиента могло определить общую задержку, которая вычисляется, чтобы быть 500 миллисекунд. Когда 500 миллисекунд прошли в сервере, ошибка задержки возвращана клиенту. Если есть 50 задержек сетевого распространения миллисекунд, клиент не будет извещен о задержке до приблизительно 50 миллисекунд после того, как задержка действительно произошла.
Параметры задержки влияют на поведение перекрытого чтения и записывают операции на устройство связи. С перекрытым В/В, ReadFile, WriteFile, ReadFileEx, или функция WriteFileEx может возвращаться прежде, чем операция будет завершена. Параметры задержки могут определиться когда операция завершена.
|
|
|
|
| |