2012-11-11 5 views
0

요약하면 네트워킹 응용 프로그램에 GUI를 구현하려고합니다. 둘 다 mainloop() 그래서 별도의 스레드에 넣으려고 해요 그리고 boost :: thread 사용하고 있습니다.wxwidgets의 mainloop() 및 boost :: thread

//standard initialization of boost::thread 
    GuiThread.join(); 
    NetworkThread.join(); 

그러나 알 수없는 이유로 충돌합니다. 같은 제안을 할 수있는 방법을 모색 중이므로 어떤 제안도 환영 할 것입니다.

미리 감사드립니다.

편집 :

것은 내가 지금처럼 wxWidgets에의 주회 돌이의 부스트 : 스레드 GuiThread을 만드는거야 :

boost::thread GuiThread = boost::thread (boost::bind(&myAppClass::MainLoop(), this)); 

및 Networkthread 같은 방법으로. 난 (VS2010에서)를 실행하면, 그것은 말한다

int OnRun() { 
      GuiThread.join(); 
      NetworkThread.join(); 
      return 0; 
    } 

을 :

그럼 난과 같이) 함수를 wxApp OnRun을 (다시 MyApp.exe의 중단 점을 트리거하고 내가 계속 누르면 그것은을 보여주는 중지 창문, 내가 누를 때마다 나에게 어셈블리를 보여줍니다.

+0

정보가 충분하지 않습니다. 어떤 충돌, 어디서 충돌, 어떻게 충돌 ... –

+0

@Igor R. 거기 내가 편집했습니다. –

+0

다른 스레드에서 wxwidgets gui에 액세스하는 것이 합법적입니까? 이 gui 루프를 메인 테드에두고 네트워크 루프를 위해서만 다른 스레드를 시작하는 것이 좋습니다. –

답변

1

라이브러리를 초기화 한 동일한 스레드에서 wxWidgets main 루프를 실행해야합니다. main 이외의 스레드에서 실행하려면 표준 IMPLEMENT_APP() 매크로를 사용할 수 없지만 직접 초기화해야합니다. 수동으로 wxEntry()에 전화하십시오.

+0

죄송 합니다만 wxWidgets에 멍청한 사람입니다. wxEntry()를 호출하는 것에 대한 더 많은 정보를 제공 할 수 있습니까? 네트워킹과 GUI를 함께 처리하는 메인 클래스를 계속 유지할 수 있습니까? 아니면 GUI만으로 wxThread를 상속 할 클래스를 만들어야합니까? –

+0

가장 간단한 경우에는 문자 그대로 [wxEntry()] (http://docs.wxwidgets.org/trunk/group__group__funcmacro__appinitterm.html#ga7d3eefb35631a5d8dfce97eb17340b21)를 호출하기 만하면됩니다. 그리고 당신은이 쓰레드에 대해'wxThread'를 사용할 필요가 없습니다. 그렇지 않으면 실제로 더 좋습니다. –

+0

아, 이제 알겠습니다. 고맙습니다. –