【问题标题】:Window frame hang due to misuse of thread误用线程导致窗框挂起
【发布时间】:2011-07-28 22:35:20
【问题描述】:

我在 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,我们按下关闭按钮,然后有时新框架打开,一些时间框架挂起,我认为线程对此负责,但在这里我采取了适当的预防措施来处理线程,请告诉我,我错了。

【问题讨论】:

  • 有时我收到如下错误:- ass8-1-login_report: pthread_mutex_lock.c:312: __pthread_mutex_lock_full: Assertion `(-(e)) != 3 || !robust'失败了。

标签: posix wxwidgets mutex


【解决方案1】:

基本上问题是Thread,wxThread,默认thread是Detatched,工作完成后自动删除。在线程活动期间,当我们检查 if( obj->IsAlive ) 时,没问题,但是当线程结束时,我们检查了这个
` if(obj -> IsAlive ) 显示问题,因为当线程删除时,没有线程对象。我们仍在检查这一点。 [这是主要问题]。我使用外部变量来检查线程是活还是死,现在我的代码工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2015-04-09
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多