簡體   English   中英

如果線程本身退出,則從從線程調用的方法中強制返回

[英]forcefully return from a method that called from a thread if thread itself exited

我每2秒使用一個pthread輪詢網絡。 為此,我要從pthread的run()方法調用一個客戶端接口。 但是當服務器和客戶端之間的網絡斷開時發生的情況是此方法應該引發異常,但是現在還沒有發生。所以我打算強制返回此方法並退出線程。

為了達到這個目的,我試圖通過發出信號來強制退出線程。 但是我仍然面臨的問題是,從線程本身退出后,客戶端接口很晚才引發異常,這導致實現中的行為不一致。

我的代碼看起來像這樣

//server side code
//This is Linux code

void ServerImp::run()
{
  try {
  while(1)
  {
    Client->PingNetwork()
  }
  }
  catch(...)
  {
    //Handle exception
  }

}

//PingNetwork implementation
//This is Windows code
void NetworkImpl::PingNetwork() throw exception
{
  try{
  while(IsValidClient())//This will return as soon as client disconnected from server
  {
     sleep(2);
  }
  }
  catch(...)
  {
     //Handle exception
  }
}

提出此問題的基本想法是,對我而言,我的底層接口TAO 2.0a不會立即檢測到當前會話的網絡故障,但在客戶端它會及時檢測到故障並發起一個新的會話進行連接。舊會話有CORBA :: COMM_FAILURE異常,因此導致服務器和客戶端中的不穩定行為。 這是TAO的限制嗎? 或者我必須做點什么才能使其正常工作。 如果有任何解決方法,請幫助我。

謝謝

聽起來您的強制退出線程沒有完全退出。 干凈退出的線程應將其所有上下文銷毀,並且不留任何殘留物。 pthread可以是可連接的也可以是分離的,您使用哪種類型的線程創建? 強制退出后,“客戶”對象是否被銷毀? 創建線程的邏輯又如何處理僵屍線程的異常? 回答所有這些問題,然后自己處理所有這些細節。

暫無
暫無

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

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