0

Windows の C++ で wxwidgets を使用したスレッドの作成に関連して読んでいましたが、次のコード スニペットの意味を理解できません。

以下はプロジェクトの一部です:-

  Myfirm.cpp
  My thread.h
  Mythread.cpp

  in Myfirm.cpp

  the following code is not understood by me:-

  BEGIN_EVENT_TABLE(MyFrm,wxFrame)
       EVT_COMMAND(wxID_ANY, wxEVT_MYTHREAD, MyFrm::OnMyThread)
  END_EVENT_TABLE()

  void MyFrm::PerformCalculation(int someParameter){//not sure what is it 
   MyThread *thread = new Mythread(this, someParameter);
   thread->Create();
   thread->Run();
   }

  void MyFrm::OnMyThread(wxCommandEvent& event)//here also the clarity is not good
  {
   unsigned char* temp = (unsigned char*)event.GetClientData();

   delete[] temp;  
  }    

  in this exampe what is even more confusing is that , it does not contain a main()     
  function

  in Mythread.h

  BEGIN_DECLARE_EVENT_TYPES()
       DECLARE_EVENT_TYPE(wxEVT_MYTHREAD, -1)
  END_DECLARE_EVENT_TYPES()

  in Mythread.cpp

  DEFINE_EVENT_TYPE(wxEVT_MYTHREAD)
  MyThread::MyThread(wxEvtHandler* pParent, int param) : wxThread(wxTHREAD_DETACHED),                      
  m_pParent(pParent)

  {
   m_param = param;
  }
  void* MyThread::Entry()
  {
  wxCommandEvent evt(wxEVT_MYTHREAD, GetId());
  evt.SetInt(r); 
  evt.SetClientData(data); 
  wxPostEvent(m_pParent, evt);
  return 0;
  }
  i am atill wondering how does the following code works and have no idea about where 
  where the main function is?

ありがとう

4

1 に答える 1

1

まず、wxWidgets インストールのスレッド サンプルと、大きな例を含むwxThreadのドキュメント ページを確認することをお勧めします。ただし、コードを分解して説明してみましょう。

BEGIN_EVENT_TABLE(MyFrm,wxFrame)
       EVT_COMMAND(wxID_ANY, wxEVT_MYTHREAD, MyFrm::OnMyThread)
END_EVENT_TABLE()

これはイベント テーブルです。フレームはwxEVT_MYTHREAD任意の ID を持つタイプのイベントを処理し、イベントを受け取るとMyFrm::OnMyThreadメソッドを呼び出すことを示しています。

void MyFrm::PerformCalculation(int someParameter){//not sure what is it 
   MyThread *thread = new Mythread(this, someParameter);
   thread->Create();
   thread->Run();
}

このメソッドはMyThread、おそらくいくつかの計算を行うために、整数パラメーターを渡すインスタンスを作成します。次に、スレッドを実行します。

void MyFrm::OnMyThread(wxCommandEvent& event)//here also the clarity is not good
{
   unsigned char* temp = (unsigned char*)event.GetClientData();
   delete[] temp;  
} 

wxEVT_MYTHREADこれは、イベントが発生したときに呼び出されるメソッドです。次に、イベントからデータを取得し (この場合はスレッドに設定されています)、通常はそれに対して何かを行いますが、この場合は削除するだけです。

この例でさらに紛らわしいのは、main()
関数が含まれていないことです。

wxWidgets でこれを説明するwxApp の概要と、wxWidgets プログラムの基本のみを示す最小限のサンプルを見てみましょう。

BEGIN_DECLARE_EVENT_TYPES()
       DECLARE_EVENT_TYPE(wxEVT_MYTHREAD, -1)
END_DECLARE_EVENT_TYPES()

このコードは、 という新しいイベント タイプを宣言しwxEVT_MYTHREADます。

DEFINE_EVENT_TYPE(wxEVT_MYTHREAD)

これにより、新しいイベント タイプが定義されます。

MyThread::MyThread(wxEvtHandler* pParent, int param) : wxThread(wxTHREAD_DETACHED), m_pParent(pParent)
{
    m_param = param;
}

パラメーターを格納するスレッド クラスのコンストラクター。

void* MyThread::Entry()
{
    wxCommandEvent evt(wxEVT_MYTHREAD, GetId());
    evt.SetInt(r); 
    evt.SetClientData(data); 
    wxPostEvent(m_pParent, evt);
    return 0;
}

Entry メソッドは、wxThread で実際の作業を行います。詳細については、ドキュメントを参照してください。この場合、イベントを作成してパラメーターを設定し、投稿します。

于 2012-04-13T07:25:28.163 に答える