【问题标题】:fill high data in wxListCtrl using wxThread- i can but使用 wxThread 填充 wxListCtrl 中的高数据 - 我可以但
【发布时间】:2011-02-17 08:17:06
【问题描述】:

我想在 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,它正在工作,但我超过了限制(我不知道在什么时候)它开始显示错误 如果您有任何建议,请帮助我...

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

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

    【讨论】:

    • 你的意思是说在线程类中我们得到要填充的值并传递给主线程(从线程调用的地方)我应该使用 setItem 来填充 wxListCtrl 值。我试过很多次但是我如何发布事件以发送数据以及如何在主线程中获取数据
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2019-08-02
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多