使用wxThread在wxListCtrl中填充高数据 - 我可以但是

时间:2011-02-17 08:17:07

标签: c++ wxwidgets

我想在wxListCtrl中填充数据库表,我可以这样做,我使用wxThread。我的问题是 - 我的概念是为少量数据工作,当我增加大小时,它显示错误,如 -

showingdatainwxlistctrl: ../../src/XlibInt.c:595: _XPrivSyncFunction: Assertion `dpy->synchandler == _XPrivSyncFunction' failed.

我的代码如下: -

void *MyThread :: Entry()
{
    int i=1,j,k=0   ;
    while(i!=400)
    {
        long index=this->temp->data_list_control->InsertItem(i,wxT("amit"));

        for(j=1;j<3;j++)
        {
            this->temp->data_list_control->SetItem(index,j,wxT("pathak"));    
        }
        k++;
        if(k==30)
        {
            this->Sleep(1000);
            k=0;
        }
        i++;    
    }
}

如果我使用i = 4,10 100,它正在工作但我越过极限(我不知道在哪一点)它开始显示错误 如果您有任何建议,请帮助我...

2 个答案:

答案 0 :(得分:0)

您正在从另一个线程访问非线程安全的wxListCtrl,这根本不起作用。

更好的解决方案可能是跳过线程,使用wxTimer,然后每次调用OnTimer时再填充400个条目。

答案 1 :(得分:0)

您需要将事件发布到主线程并在事件处理程序中添加项,而不是直接从工作线程调用SetItem。列表控件事件的数据应放在自定义事件类中。请参阅wxPostEvent函数和此处的详细信息:http://wiki.wxwidgets.org/Custom_Events