11 out of 19 rated this helpful - Rate this topic

COMMTIMEOUTS structure

Applies to: desktop apps only

Contains the time-out parameters for a communications device. The parameters determine the behavior of ReadFile, WriteFile, ReadFileEx, and WriteFileEx operations on the device.

Syntax

typedef struct _COMMTIMEOUTS {
  DWORD ReadIntervalTimeout;
  DWORD ReadTotalTimeoutMultiplier;
  DWORD ReadTotalTimeoutConstant;
  DWORD WriteTotalTimeoutMultiplier;
  DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;

Members

ReadIntervalTimeout

The maximum time allowed to elapse between the arrival of two bytes on the communications line, in milliseconds. During a ReadFile operation, the time period begins when the first byte is received. If the interval between the arrival of any two bytes exceeds this amount, the ReadFile operation is completed and any buffered data is returned. A value of zero indicates that interval time-outs are not used.

A value of MAXDWORD, combined with zero values for both the ReadTotalTimeoutConstant and ReadTotalTimeoutMultiplier members, specifies that the read operation is to return immediately with the bytes that have already been received, even if no bytes have been received.

ReadTotalTimeoutMultiplier

The multiplier used to calculate the total time-out period for read operations, in milliseconds. For each read operation, this value is multiplied by the requested number of bytes to be read.

ReadTotalTimeoutConstant

A constant used to calculate the total time-out period for read operations, in milliseconds. For each read operation, this value is added to the product of the ReadTotalTimeoutMultiplier member and the requested number of bytes.

A value of zero for both the ReadTotalTimeoutMultiplier and ReadTotalTimeoutConstant members indicates that total time-outs are not used for read operations.

WriteTotalTimeoutMultiplier

The multiplier used to calculate the total time-out period for write operations, in milliseconds. For each write operation, this value is multiplied by the number of bytes to be written.

WriteTotalTimeoutConstant

A constant used to calculate the total time-out period for write operations, in milliseconds. For each write operation, this value is added to the product of the WriteTotalTimeoutMultiplier member and the number of bytes to be written.

A value of zero for both the WriteTotalTimeoutMultiplier and WriteTotalTimeoutConstant members indicates that total time-outs are not used for write operations.

Remarks

If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and less than MAXDWORD, one of the following occurs when the ReadFile function is called:

  • If there are any bytes in the input buffer, ReadFile returns immediately with the bytes in the buffer.
  • If there are no bytes in the input buffer, ReadFile waits until a byte arrives and then returns immediately.
  • If no bytes arrive within the time specified by ReadTotalTimeoutConstant, ReadFile times out.

Requirements

Minimum supported client

Windows XP

Minimum supported server

Windows Server 2003

Header

Winbase.h (include Windows.h)

See also

GetCommTimeouts
ReadFile
ReadFileEx
SetCommTimeouts
WriteFile
WriteFileEx

 

 

Send comments about this topic to Microsoft

Build date: 2/7/2012

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Seems right order to me?
Used 'ReadTotalTimeoutConstant' to just wait a set amount of time for a byte using the MS format.
The references surely cant be wrong?
wrong order
The mentioned COMMTIMEOUTS-struct ist declared in this order :

  1. ReadIntervalTimeout
  2. ReadTotalTimeoutConstant
  3. ReadTotalTimeoutMultiplier
  4. WriteTotalTimeoutConstant
  5. WriteTotalTimeoutMultiplier

But the above article says that one would need to input a pointer to a structure with the same name which is declared as

  1. ReadIntervaltimeout
  2. ReadTotalTimeoutMultiplier
  3. ReadTotalTimeoutConstant
  4. WriteTotalTimeoutMultiplier
  5. WriteTotaltimeoutConstant
which is equal to the SERIAL_TIMEOUTS-struct in the WDF - notice the switched order of the members .... the article is about the API - function therefore it should use the real COMMTIMEOUTS-struct instead of SERIAL_TIMEOUTS or else this will cause confusion and im pretty sure it already has since one will not always be able to memcpy() from one struct to another ....