2017-03-27 7 views
0

私は現在COMMTIMEOUTS structureを扱っています。私はRS232C経由で最大75文字の読み上げに最善を尽くしており、20秒後にはタイムアウトが必要です。CommTimeoutとパラメータC++

は、現在、私が持っているものである。この:

this->m_cTimeouts.ReadIntervalTimeout = 0; 
this->m_cTimeouts.ReadTotalTimeoutConstant = 20000; 
this->m_cTimeouts.ReadTotalTimeoutMultiplier = 0; 

しかし、ちょうどそれが自動キックオフとき103Sまで読んでいるようです。何か案は?

COMMTIMEOUTを別の機能に設定しているため、これが問題であると確信しています。

答えて

0

より慎重にドキュメントを読む:

ReadIntervalTimeout
ミリ秒単位で、通信回線上の次のバイトの到着前に経過することが許容される最大時間を。任意の2バイトの到着間隔がこの値を超えると、ReadFile操作が完了し、バッファされたデータが返されます。 ゼロの値は、インターバルのタイムアウトが使用されないことを示します。

ReadTotalTimeoutConstantとReadTotalTimeoutMultiplierメンバーの両方のためのゼロ値と組み合わせMAXDWORDの値は、読み出し動作が何バイトが受信されていない場合であっても、既に受信されたバイトで直ちに返すことであることを指定します。ミリ秒単位で、読み出し動作の合計タイムアウト期間を計算するために使用される乗算器

ReadTotalTimeoutMultiplier。 各読み取り操作では、この値に要求された読み取りバイト数を掛けます。

ReadTotalTimeoutConstant
ミリ秒単位で、読み出し動作の合計タイムアウト期間を計算するために使用される定数。 各読み取り操作では、この値がReadTotalTimeoutMultiplierメンバーと要求されたバイト数の積に加算されます。

あなたが75のバイトを読み、20代最大タイムアウトは、あなたが75 * 266 = 19950msあるReadTotalTimeoutMultiplier20000/75 = 266、設定、および残りの50msのため50ReadTotalTimeoutConstantを設定することができますしたいされている場合。

関連する問題