疑惑,使用WinInet函数在DLL里面,在FreeLibrary执行的为什么这么慢?
seesi 2005-06-13 11:14:11 我在我的一个DLL工程里面调用了WinInet的相关函数。如下面所示
int PostInfo(const char* cpszServerAddress, void* pvSend, int nSendSize, void* pvReturn, int* pnReturnSize)
{
bool bResult = false;
int nRetcode = false;
HINTERNET hSession = NULL;
HINTERNET hConnect = NULL;
HINTERNET hRequst = NULL;
char szReadBuf[4096] = {0};
int nRead = 0;
hSession = ::InternetOpen("MyAgent",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
INTERNET_INVALID_PORT_NUMBER,
0);
if (!hSession)
{
goto Exit0;
}
hConnect = ::InternetConnect(hSession,
cpszServerAddress,
INTERNET_DEFAULT_HTTP_PORT,
"",
"",
INTERNET_SERVICE_HTTP,
0,
1);
if (!hConnect)
{
goto Exit0;
}
hRequst = ::HttpOpenRequest(hConnect,
"POST",
"test.asp",
HTTP_VERSION,
NULL,
0,
INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD,
1);
if (!hRequst)
{
goto Exit0;
}
nRetcode = ::HttpSendRequest(hRequst, NULL, 0, pvSend, nSendSize);
if (!nRetcode)
{
goto Exit0;
}
nRetcode = ::InternetReadFile(hRequst, szReadBuf, sizeof(szReadBuf) - 1, (LPDWORD)&nRead);
if (!nRetcode || nRead == 0)
{
goto Exit0;
}
*(char*)(szReadBuf + nRead) = NULL;
memcpy(pvReturn, szReadBuf, *pnReturnSize);
*pnReturnSize = nRead;
bResult = true;
Exit0:
if (hRequst)
{
InternetCloseHandle(hRequst);
}
if (hConnect)
{
InternetCloseHandle(hConnect);
}
if (hSession)
{
InternetCloseHandle(hSession);
}
return bResult;
}
我使用另外的一个EXE工程,LoadLibrary把该DLL动态Load进来,调用该DLL的导出函数PostInfo,很快就返回正确的数据了。但是当我的EXE在调用FreeLibrary的时候却要很长时间才返回(30秒左右),这段时间内界面也会失去响应。有什么解决的办法吗?