我在 C++ Builder XE 中的 OnExecute 中有以下代码:
void __fastcall Test::TestExecute( TIdContext* AContext )
{
try
{
// get the command directive
DWORD startTime = timeGetTime( );
UnicodeString DBCommand = AContext->Connection->IOHandler->ReadChar();
DWORD endTime = timeGetTime();
UnicodeString log;
log.printf( L"getting command %d ms", endTime - startTime );
Log( log );
...
日志从获取命令 100 毫秒开始,然后爬到 300 毫秒,等待应用程序的其余部分运行。我认为OnExecute
一旦数据进入缓冲区就会调用它,那么为什么第一次读取成功需要 100 到 300 毫秒?
在第一次读取相同的OnExecute
所有其他数据之后,读取速度非常非常快(毫秒到亚毫秒)。
可能出了什么问题?
编辑:
在方法启动时:AContext->Connection->IOHandler->InputBuffer->Size
为 0。第一次读取后返回AContext->Connection->IOHandler->InputBuffer->Size
包含读取后缓冲区中剩余的内容。所以这意味着OnExecute
在调用者实际可以使用任何数据之前调用它。所以 100-300 毫秒是 Indy 从套接字获取数据并在收到数据到达通知后将其放入缓冲区所花费的时间。这似乎太长了。
编辑:
删除do{
,因为它暗示了一个不存在的循环。