2011-04-04 74 views
0

我在wxListCtrl中获取数据库表值(数据可能很大,所以我使用的是wxThread)子线程发送行到主线程和主线程填充它在wxListCtrl中,一切都是进展良好,但当我试图关闭框架时,它给了我意想不到的结果。在关闭按钮,我调用一个新的框架,有时它会打开并在一段时间了,我的代码是: -由于线程被误操作导致窗口挂起

if(thread_object_holder->IsAlive()) 
     { 
      wxPuts(wxT("live")); 
      thread_object_holder->Pause(); 
      wxMessageDialog *msg = new wxMessageDialog(this,wxT("You want to quit"), wxT("Quit Login Report") ,wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION); 
      if (msg->ShowModal() == wxID_YES) 
      { 
       thread_object_holder->Delete(); 
       temp_back_frame *obj= new temp_back_frame(); 
       this->Destroy(); 
       obj->Show(true); 
      } 
      else 
      { 
       thread_object_holder->Resume(); 
      } 
     } 
     else 
     { 
      wxPuts(wxT("dead")); 
      wxMessageDialog *msg = new wxMessageDialog(this,wxT("You want to quit"), wxT("Quit Login Report") ,wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION); 
      if (msg->ShowModal() == wxID_YES) 
      { 
       thread_object_holder->Delete(); 
       temp_back_frame *obj= new temp_back_frame(); 
       this->Destroy(); 
       obj->Show(true); 
      } 

     } 

仅有7个在表行,填充记录期间,如果我按下按钮,一切都很好,但一旦有7行放在ListCtrl {我认为现在线程将被破坏},我没有数据放到listctrl,我们按关闭按钮,然后有时新框架打开,一些时间框架挂起,我认为线程负责但这里我采取了适当的预防措施来处理线索,请告诉我,我错了。

+0

一些时刻i得到的错误,如: - ass8-1-login_report:pthread_mutex_lock.c:312:__pthread_mutex_lock_full:断言'( - (E))= 3 || !强劲'失败。 – Arjun 2011-04-04 07:51:21

回答

0

基本问题是Thread,wxThread,默认线程是Detatched,它会在完成工作时自动删除。这里在线程活着的时候,当我们检查if(obj-> IsAlive)时,没问题,但是线程结束的时候我们检查了这个
` if(obj - > IsAlive) 显示问题,因为当线程删除的时候, .still我们正在检查这个。 [这是主要问题]。我使用extern变量来检查线程是活的还是死的,现在我的代码工作正常。