2016-12-27 16 views
0

私のプロジェクトには実行時間があります。私は以下のコードでそれを示します:実行時間を表示するためのプログレスバーを挿入するとプロジェクトが進行しますか?

#include <opencv2/opencv.hpp> 
#include <gtk/gtk.h> 
#include <time.h> 

using namespace cv; 
using namespace std; 

gboolean Func (gpointer data) { 
    gdouble value; 
    GString *text; 

    //part of code that generate run time 
    clock_t start, end; 
    start = clock(); 

    Mat image, src1, DENO; 
    image = imread("C:/Users/Alireza/Desktop/1.png"); 
    cvtColor(image, src1, CV_RGB2GRAY); 
    fastNlMeansDenoising(src1, DENO, 19, 29, 38); 
    imwrite("DENO.png", DENO); 

    end = clock(); 
    int runtime = ((int)(end - start))/CLOCKS_PER_SEC; 
    cout << "Time1 = " << runtime << "s" << endl; 


    //part of code that I want to show run time progress by progress bar 
    value = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(data)); 

    value += 0.01; 
    if (value > 1.0) { 
     value = 0.0; 
    } 

    text = g_string_new(gtk_progress_bar_get_text(GTK_PROGRESS_BAR(data))); 
    g_string_sprintf(text, "%d%%", (int)(value * 100)); 
    gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(data), value); 
    gtk_progress_bar_set_show_text(GTK_PROGRESS_BAR(data), TRUE); 
    gtk_progress_bar_set_text(GTK_PROGRESS_BAR(data), text->str); 

    while (gtk_events_pending()) 
     gtk_main_iteration(); 

    return TRUE; 
} 

int main(int argc, char *argv[]) 
{ 
GtkWidget *window; 
GtkWidget *progressBar; 
gint timer; 

gtk_init(&argc, &argv); 

window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
gtk_window_set_title(GTK_WINDOW(window), "GtkProgressBar"); 
gtk_window_set_default_size(GTK_WINDOW(window), 300, 30); 

progressBar = gtk_progress_bar_new(); 
timer = g_timeout_add(100, Func, progressBar); 

gtk_container_add(GTK_CONTAINER(window), progressBar); 

gtk_widget_show_all(window); 

gtk_main(); 

return 0; 

} 

進捗バーを使用して私のプロジェクトを進めたいです。

1.png

しかし、私は私のプロジェクトの進捗状況の実行時間を表示するために一緒にこれらのコードを組み合わせることはできません:イメージがあります。私はgtk3の新機能です。誰にもこれに関する考えや提案はありますか?

答えて

1

あなたのプログラムにはいくつかの問題があると思います。進捗バーについて:

gtk_progress_bar_set_fractionを呼び出すときは、実際には進行状況バーを更新しますが、Gtkが更新されたバーの描画を行う時間は与えません。 (また、gtk_progress_bar_set_fractionへの呼び出しはforループの中にあるべきです)

Gtkがそれを行うことを可能にするために(また、クリックやキーボードなどの他のイベントにも関わってくる)これにより、Gtkのメインループが保留中の要求に対処できます。

gtk_main_iterationgtk_main_iteration_doをご覧ください。数学のループにそれらを含める必要があります。

+0

@ jcoppens:ありがとうございました。コードを更新します。しかし、私は進行状況バーで実行時間の進行を表示したい。例えば、私のコードでは、実行時を生成する部分があります(OpenCVによる画像処理に関連しています)。画像の実行時間は5秒です。プログレスバー(1秒のいずれか20%に等しい)の同時性で5秒の進行を表示したい。可能であれば、私のコードを編集してください。 –

+0

体が助けてくれませんか? –

関連する問題