2009-07-14 2 views
2

현재 다중 스레드 응용 프로그램을 개발 중입니다. TreeView를 사용하여 각 스레드의 상태 (스레드 당 하나의 행)를 표시합니다. 이 주로 두 종류입니다 : 처리 스레드에 대한외부 함수에서 Gtk :: TreeModel :: Row를 업데이트하는 방법

  1. 메인 GUI 클래스를 포함 트 리뷰
  2. 수업은 Gtk ::하는 TreeModel을 전달 :: 반복자를 두 번째 클래스에 인수로

이후 실행 가능하지 않다 행 [m_Columns.m_id]와 같은 형식으로 행의 요소에 액세스 할 수 없습니다. 외부 함수에서 변경 한 요소가 스레드마다 다르므로 Glib :: Dispatcher를 사용할 수도 없습니다.

따라서 외부 기능에서 GUI를 업데이트 할 수있는 실용적인 방법이 있습니까?

+0

정말 여기에 어떤 질문이 있는지 잘 모르겠습니다. 문제는 GtkTreeModel 자체의 업데이트입니까, 아니면 GUI를 소유하고있는 스레드가 아닌 다른 스레드에서 그렇게할까요? – unwind

+0

나의 가난한 영어를 유감으로 여긴다. 나는 두 번째 것을 의미했다. –

답변

2

외부 파일의 열에 대한 클래스를 선언하고 파일을 GUI 클래스 파일과 스레드 클래스 파일에 포함 할 수 있습니다.

당신이 GUI 클래스의 열 인스턴스 m_columns를 생성하고, 클래스를 스레드에 매개 변수로 전달하면, 당신의 요소에 액세스 할 수

(*row)[m_columns.m_id] 

을 사용할 수 있도록

class Columns : public Gtk::TreeModel::ColumnRecord 
{ 
public: 
    Gtk::TreeModelColumn<unsigned int> m_id; 
    Gtk::TreeModelColumn<Glib::ustring> m_pin; 
    Gtk::TreeModelColumn<Glib::ustring> m_name; 
    Gtk::TreeModelColumn<unsigned int> m_percentage; 
    Gtk::TreeModelColumn<Glib::ustring> m_status; 

    Columns() 
    { 
     add(m_id); 
     add(m_pin); 
     add(m_name); 
     add(m_percentage); 
     add(m_status); 
    } 
}; 

처럼 TreeModel.

+0

솔루션인지 또는 의견/정확성인지는 분명하지 않습니다. 대답이 아니라 질문에 포함 시키면. StackOverflow는 포럼이 될 ment가 아닙니다 ... – neuro

+0

당신의 솔루션이라면, 더 명확 해집니다 :) – neuro

+0

몇 가지 샘플 코드를 추가했습니다. –

0

아키텍처를 재고해야한다고 생각합니다. 가장 간단하고 안전한 방법은 스레드가 스레드를 안전하게 수집하여 클래스를 수집하는 것입니다. 그런 다음 GUI 스레드에서 해당 정보를 읽고 트리 비엔을 변경 한 다음 새로 고칩니다.

큰 gtkmm/다중 스레드 응용 프로그램에서이 패러다임을 사용합니다. 항상 동기화 코드를 중앙 집중화하는 것이 더 좋습니다.

도움이되기를 바랍니다.

+0

자세히 설명해 주시겠습니까? 각 스레드의 행을 찾는 방법은 무엇입니까? –

관련 문제