2017-12-11 6 views
0

wxWidgetsを使用して進行状況バーを表示する必要があります。現在、私はこれをやっています:なぜ `OnWorkerEvent`が` wxProgressDialog`で使われていますか?

m_dlgProgress = new wxGenericProgressDialog(wxString("Heading"), wxString("Message"), max, this, wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH); 
    for (int i = 0; i <= max; i++) 
    { 
    cont = m_dlgProgressConfig->Update(i); 
    i += max/7; 
    wxMilliSleep(200); 
    } 
    callingSomeFunctionFromBackend(); 
    //after this function is executed I am updating dialogue with its maximum value 
    cont = m_dlgProgressConfig->Update(max); 

これは正しい方法ですか?スレッドを作成し、OnWorkerEventを使用して進行状況バーを更新するコードをいくつか見てきました。なぜ彼らはスレッドを作成するのですか?私がやったことは正しかったのですか、それともそれ以上問題を引き起こすのでしょうか?

答えて

1

あなたは本当にスタック上にダイアログを作成し、ヒープ上に(特にそれを削除することなく)ダイアログを割り当ててはいけませんが、wxProgressDialogの代わりにwxGenericProgressDialogを使用する理由はわかりません。

しかし、別のスレッドを使用するとプログラムのGUIが応答しやすくなりますが、例では一度に200ミリ秒もブロックされますが、「バックエンドからのいくつかの関数」が実行されます。これを受け入れることができれば、このように保つことができますが、バックグラウンドスレッドを使用すると、プログラマからより多くの労力が必要ですが、ユーザーエクスペリエンスが向上することがよくあります。

+0

はい、私はスレッドを作成します。スタック上で対話を作成する方法は? – alohamora

+0

'new'を使用してヒープ上に作成するのではなく、' wxProgressDialog dlg( "Heading"、 "Message"、max) 'として作成してください。 –

+0

これで私を助けてください:https://stackoverflow.com/questions/47894040/create-wxthread-to-call-backend-function-for-every-evt-treelist-item-expanded – alohamora

関連する問題