заполнить высокие данные в wxListCtrl с помощью wxThread - я могу, но

я хочу заполнить таблицу базы данных в 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, он работает, но я перешел предел (я не знаю, в какой момент) он начинает показывать ошибку, если у вас есть какие-либо предложения, пожалуйста, помогите мне...


person Arjun    schedule 17.02.2011    source источник


Ответы (2)


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

person Alex F    schedule 17.02.2011
comment
вы хотите сказать, что в классе потока мы получаем значение, которое будет заполнено и передано в основной поток (откуда вызывается поток), там я должен использовать setItem для заполнения значения wxListCtrl.. я много пробовал это, но как я могу опубликовать событие для отправки данные и как получить данные в основном потоке - person Arjun; 17.02.2011

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

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

person Erik    schedule 17.02.2011