读书人

一个简单的语法放在线程中程序就崩溃

发布时间: 2013-04-21 21:18:07 作者: rapoo

一个简单的语法,放在线程中程序就崩溃,放在BUTTON下就没问题,有代码
var
FHTTPObj: OleVariant;
begin

FHTTPObj := CreateOleObject('WinHttp.WinHttpRequest.5.1');

log(3);
// FHTTPObj.Charset :='GB2312';
FHTTPObj.setTimeouts(50000, 50000, 50000, 50000);
FHTTPObj.Open('GET', 'https://www.baidu.com/', False);
FHTTPObj.SetRequestHeader('User-Agent', MyUserAgent);
FHTTPObj.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
end;

这个函数 放在线程下 程序就崩溃 放在BUTTON主程序下 就完全没问题,请教哪出了问题 多线程 gb2
[解决办法]
试下这样:


uses ActiveX;


var
FHTTPObj: OleVariant;
begin
coInitialize(nil);
try
FHTTPObj := CreateOleObject('WinHttp.WinHttpRequest.5.1');

log(3);
// FHTTPObj.Charset :='GB2312';
FHTTPObj.setTimeouts(50000, 50000, 50000, 50000);
FHTTPObj.Open('GET', 'https://www.baidu.com/', False);
FHTTPObj.SetRequestHeader('User-Agent', MyUserAgent);
FHTTPObj.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
finally
CoUninitialize;
end;
end;

[解决办法]
线程中要单独初始化COM环境——CoInitialize
[解决办法]
前几天也才纠结这个问题,为了完成任务就直接不用线程了。
又记得在某群里正好也见过讨论,昨天重写了下代码,就是用的coInitialize初始化com组件

读书人网 >.NET

热点推荐