簡體   English   中英

設置TIdHTTP對象時出現定期訪問沖突

[英]Periodic Access Violations when setting up a TIdHTTP object

在設置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 ???)

到目前為止,我無法在調試器中復制此問題以獲取任何其他信息。

可能導致訪問違規的任何想法?

根據Remy Lebeau的評論,解決方案是從TIdHTTP對象中刪除所有者:

更改

TIdHTTP* httpClient = new TIdHTTP(Application->MainForm);

TIdHTTP* httpClient = new TIdHTTP(NULL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM