由于误用线程,窗框挂起

时间:2011-04-04 05:35:15

标签: posix wxwidgets mutex

我在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,我们按下关闭按钮,然后新框架打开,一段时间框架挂起,我认为线程是负责的,但是我采取正确的预防措施来处理线程,请让我知道,我错了。

1 个答案:

答案 0 :(得分:0)

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