我在C++ Builder中XE OnExecute下面的代码:印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{
因为它意味着一个循环,是不存在。
对不起,`do {`暗示着一个不存在的循环。我不会在`OnExecute`循环,我使用`do {} while(false);`提前退出。数据到达时调用OnExecute,是否正确?但在调用“OnExecute”之后,仍需要100到300 ms才能获得第一个数据。我不记得这发生在C++ Builder 2010中。 – 2011-02-16 14:05:14