2011-02-17 3 views
0

wxListCtrl의 데이터베이스 테이블을 채우고 싶습니다. 이렇게하려면 wxThread를 사용합니다. - 내 문제는 내가 크기를 늘릴 때 내 개념은 데이터의 소량을 위해 노력하고, 내 코드는 아래와 같습니다wxListCtrl에서 wxThread-i를 사용하여 높은 데이터를 채울 수는 있지만

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++;  
    } 
} 

내가 사용하는 경우 나는 = 4, 10 100, 그것은 작동하지만, 나는 한계를 넘었다. (나는 어느 시점에서 알지 못한다) 오류가 나타나기 시작하면 제안을하면 pls는 나를 돕는다.

답변

0

작업자 스레드에서 직접 SetItem을 호출하는 대신 이벤트를 주 스레드에 게시하고 이벤트 처리기에 항목을 추가해야합니다. 목록 제어 이벤트의 데이터는 사용자 정의 이벤트 클래스에 배치해야합니다. wxPostEvent 함수에 대한 자세한 내용은 여기를 참조하십시오. http://wiki.wxwidgets.org/Custom_Events

+0

스레드 클래스에서 값을 가져 와서 주 스레드 (스레드가 호출 된 곳)로 전달해야 함을 의미합니다. wxListCtrl 값을 채우기 위해 setItem을 사용해야합니다. 이 많은 시도하지만 어떻게 데이터를 보내려면 이벤트를 게시 할 수 및 주 스레드에서 데이터를 가져 오는 방법 – Arjun

0

-threadsafe wxListCtrl 다른 스레드에서,이 단순히 작동하지 않습니다.

더 나은 해결책은 스레드를 건너 뛰고 wxTimer를 사용하고 OnTimer가 호출 될 때마다 400 개 이상의 항목을 채우는 것입니다.

관련 문제