在设置 TIdHTTP 对象时,我正在为定期访问冲突而苦苦挣扎。我正在使用以下代码:
TIdHTTP* httpClient = new TIdHTTP(Application->MainForm);
httpClient->HTTPOptions = (httpClient->HTTPOptions >> hoForceEncodeParams);
httpClient->HTTPOptions = (httpClient->HTTPOptions << hoKeepOrigProtocol);
httpClient->HTTPOptions = (httpClient->HTTPOptions << hoInProcessAuth);
httpClient->Request->ContentType = L"application/json";
httpClient->Request->CharSet = L"UTF-8";
TIdSSLIOHandlerSocketOpenSSL* sslIOHandler = new TIdSSLIOHandlerSocketOpenSSL;
sslIOHandler->SSLOptions->SSLVersions = TIdSSLVersions() << sslvTLSv1 << sslvTLSv1_1 << sslvTLSv1_2;
httpClient->IOHandler = sslIOHandler;
httpClient->Request->BasicAuthentication = false;
httpClient->Request->Authentication = new TIdSSPINTLMAuthentication;
httpClient->Request->Username = connectionInfo->AuthUsername;
httpClient->Request->Password = connectionInfo->AuthPassword;
// Make a request from a REST API
delete sslIOHandler;
delete httpClient;
此代码在线程 (TThread) 中运行。在任何给定时间可能有多个线程处于活动状态,发出单独的请求。随着每个请求完成,线程被销毁。
这段代码大部分时间都可以工作,但在运行看似随机的时间后会开始抛出访问冲突,通常形式如下:
Access violation at address 5016C927 in module 'rtl210.bpl'. Read of address 00000008
一旦访问冲突开始,所有后续线程都会抛出类似的访问冲突。让事情回到正轨的唯一方法是关闭应用程序并重新启动。
我正在使用 C++Builder XE7,带有编译器附带的 Indy 版本(Indy 10.6.1.5182 ???)
到目前为止,我无法在调试器中复制此问题以获取任何其他信息。
任何想法可能导致访问冲突?