заполнить высокие данные в wxListCtrl с помощью wxThread - я могу, но - PullRequest
0 голосов
/ 17 февраля 2011

Я хочу заполнить таблицу базы данных в 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 голосов
/ 17 февраля 2011

Вместо прямого вызова SetItem из рабочего потока вам нужно отправить событие в основной поток и добавить элемент в обработчик события. Данные для события управления списком должны быть помещены в пользовательский класс событий. Подробности смотрите в функции wxPostEvent и здесь: http://wiki.wxwidgets.org/Custom_Events

0 голосов
/ 17 февраля 2011

Вы обращаетесь к не поточному wxListCtrl из другого потока, это просто не будет работать.

Лучшим решением может быть пропуск потока, использование wxTimer, а затем заполнение еще 400 записей при каждом вызове OnTimer.

...