我在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 :(得分:0)
基本问题是Thread,wxThread,默认情况下线程是Detatched,它在完成工作时会自动删除。在线程活动期间我们检查是否(obj->; IsAlive),没有问题但是当线程结束时我们检查了这个 ` if(obj - > IsAlive) 显示问题,因为当线程删除时,没有thread.still的对象我们正在检查这个。 [这是主要的问题]。我使用extern变量检查线程是活的还是死的,现在我的代码工作正常。