Symbian—如何處理網絡連接超時的問題?

我們需要一個定時器,等待一定時間後自動斷開網絡連接:

定義如下:

CPeriodic* iTimer;

static TInt TimerBack(void *p);//CPeriodic start 的回調函數

 

在HTTP連接的類中

初始化如下:

iTimer = CPeriodic::NewL(CActive::EPriorityStandard);

 

在POST請求中加入:

iTimer->Start(20000000, 20000000, TCallBack(TimerBack, this));

 

在回調函數參考如下:

TInt CClientEngine::TimerBack(void *p)
 {
 CClientEngine* f = static_cast (p);
 f->iTransaction.Close();//關掉網絡連接
 f->iTimer->Cancel();//關掉定時器
 CGblData::GetGblData()->DeleteWaitNoteL();
 CGblData::GetAppUiPtr()->SetNotWait(ETrue);
 HBufC8* tempdatabuf;
 TBuf8<100> itempbuf =_L8("");
 itempbuf.Append(R_MOLO_CLIENT_TIMEOUT);
 itempbuf.Append(_L8(""));

 tempdatabuf = itempbuf.Alloc();
 CGblData::GetAppUiPtr()->ClientBodyReceivedL(
   (const char*) tempdatabuf->Ptr());
 if (tempdatabuf)
  {
  delete tempdatabuf;
  tempdatabuf = NULL;
  }
 return 1;
 }

 

在MHFRunL中加入:

iTimer->Cancel();

因爲當網絡請求先返回那麼我們就停止定時器

 

最後記得在析構函數中加入:

iTimer->Cancel();

 if (iTimer)
  {
  delete iTimer;
  iTimer = NULL;
  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章