在模拟器上出现的问题是:在局域网通畅,外网断网的情况下,向外网发送http请求,提交请求后,出现了短暂的死机现象.向局域网发出的http请求都是有响应的,并且没有死机现象。
具体是:
执行(1) iNetEngine->HttpRequestGet(_L("http://a.uuarea.com/v.do?pageID=10885"),0); 向外网发出post请求出现死机。
执行(2) iNetEngine->HttpRequestGet(_L("http://172.16.0.1/"firstConnect_3pingan?lid=0&st=1"),0); 想内网发出post请求正常。
出现这个问题的环境是:(3)外网的服务器网线断了,不通,内网通。
之所以提出这个问题是因为在手机上面测试发现,执行(1)时小概率出现几秒钟的死机现象,此时定时器无法刷屏幕滚动文字、也不能响应按键,过几秒钟就好了。但是在模拟器里面不会出现这种现象,除非出现了现象(3)。
语句(1)是为了得到手机号码。connection是连接上了的。现象出现在 iTransaction.SubmitL( ); 后。
请老手高手们给些参考意见,不胜感激。
------最佳解决方案--------------------------------------------------------
symbian初学者。。。友情帮顶。
------其他解决方案--------------------------------------------------------
你的提交操作是怎么执行的?在定时器中执行http队列,进行提交会有改善。另外可以把提交操作移至独立线程里。
------其他解决方案--------------------------------------------------------
我的是在http请求前的连接GPRS时会有几秒钟假死机情况,这个是必现的,第一次连接完成后就再没出现过,这是真机的。
模拟器经常出现假死机现象。
------其他解决方案--------------------------------------------------------
aGetDataLength > 0 )
{
TBuf8 < 64 > rangeBuf;
rangeBuf.Append( _L8( "bytes=" ) );
rangeBuf.AppendNum( aRang );
rangeBuf.Append( _L8( "-" ) );
rangeBuf.AppendNum( aRang + aGetDataLength - 1 );
SetHeaderL( hdr, HTTP::ERange, rangeBuf );
}
//DumpHeadersL(hdr);
// Submit the transaction. After this the framework will give transaction
// events via MHFRunL and MHFRunError.
//iFramework->SetUpdateRate( CSYMFramework::EUpdateLow );
iTransaction.SubmitL( );
iRunning = ETrue;
}
HttpRequestGet()函数执行完后出现了短暂的死机,然后才到MHFRunL,aEvent.iStatus是负数。
------其他解决方案--------------------------------------------------------
因为http请求非常频繁,暂未使用线程。
RConnection类的实例对象不能够进行跨线程调用
理论上讲,RHTTPTransaction是异步操作,系统会起线程啊。为什么还会阻塞UI呢?
------其他解决方案--------------------------------------------------------
该问题出现的概率较小,一般在地铁或者不经意的时候“非常偶尔”地出现。公司产品部门要求比须解决。
------其他解决方案--------------------------------------------------------
void NetworkEngine::HttpRequestGet( const TDesC8 & aUri, TInt aRang, TInt aGetDataLength )
{
CancelHttpRequest();
TUriParser8 uri;
uri.Parse( aUri );
iLastUrl.AssginData( aUri );
//if ( !iIsConnected )
{
if ( !iIapEngine->SetupConnectionL( iSession ) )
{
if ( iMHttpObserver )
{