1

Debian Linux を実行する ARM プロセッサを搭載したタッチスクリーン パネル用の GTK 2.0 を使用して、C でアプリケーションを作成しました。これは、クリックできるいくつかのボタン (イベント ボックス) を画面に表示する、非常に基本的なアプリケーションです。1 つのページに、上矢印と下矢印 (イベント ボックスも) をクリックしてスクロールできる「リスト」を表示する 4 つのフィールドがあります。スクロール用の私の関数 (以下のコード) は非常に基本的なものです...配列の次の項目で各フィールドを更新するだけです。すべて正常に動作しますが、私が見ている問題は、スクロール ボタンを繰り返しクリックする速度が速すぎると、いくつかのリスト アイテムが先に進みすぎてしまうことです。何が起こっているかについての私の推測では、クリックが速すぎると、画面が更新されるよりも速くカウンターが進みます。もう一度クリックするまでに、実際には高すぎるカウンターで更新されます。本当に速くクリックしたときにのみ発生した場合は気にしませんが、このような単純な機能がかなり速い速度で繰り返される場合、応答が遅いのは常識から外れているように思われます.

GTK を使用した画面の更新に関して、私が見逃している可能性があるものについて、誰かが何らかの意見を持っていることを願っていますか?

ご意見やアドバイスをお寄せいただきありがとうございます。

これが私の「ボリュームアップ」機能と「スクロールアップ」機能のコードで、どちらも同じ問題を抱えています。同じ問題に対応する「スクロールダウン」機能と「ボリュームダウン」機能があります。

static void sr_vol_up_clicked (GtkWidget *fakewidget, GdkEvent *fakeevent, gpointer number)
{

g_timer_start(lock_timer);
gtk_image_set_from_file (GTK_IMAGE(sr_vol_up_button),"./images/Admin/navigation_up_arrow_DOWN.png");

if (sr_current_level < 100)
{
    sr_current_level = sr_current_level + 1;
    gtk_label_set_text (GTK_LABEL(sr_current_level_label), (g_strdup_printf("%i", sr_current_level)));
    set_sr_volume(sr_current_level);
}

gtk_image_set_from_file (GTK_IMAGE(sr_vol_up_button),"./images/Admin/navigation_up_arrow_UP.png");

}

そして他の:

static void scroll_show_up ()
{
g_timer_start(lock_timer);
if (show_scroll_count > 0)
{

    if (show_one_displayed - 1 < 0)
    {
        show_one_displayed = (show_loop_list->len -1);
    }

    else
    {
        show_one_displayed = show_one_displayed - 1;
    }

    gtk_label_set_text (GTK_LABEL(upcoming_show_1_label), get_show_name((char *)g_ptr_array_index(show_loop_list, show_one_displayed)));

    if (show_two_displayed - 1 < 0)
    {
        show_two_displayed = (show_loop_list->len -1);
    }

    else
    {       
        show_two_displayed = show_two_displayed - 1;
    }

    gtk_label_set_text (GTK_LABEL(upcoming_show_2_label), get_show_name((char *)g_ptr_array_index(show_loop_list, show_two_displayed)));

    if (show_three_displayed - 1 < 0)
    {
        show_three_displayed = (show_loop_list->len -1);
    }

    else
    {
        show_three_displayed = show_three_displayed - 1;
    }

    gtk_label_set_text (GTK_LABEL(upcoming_show_3_label), get_show_name((char *)g_ptr_array_index(show_loop_list, show_three_displayed)));

    if (show_four_displayed - 1 < 0)
    {
        show_four_displayed = (show_loop_list->len -1);
    }

    else
    {
        show_four_displayed = show_four_displayed - 1;
    }

    gtk_label_set_text (GTK_LABEL(upcoming_show_4_label), get_show_name((char *)g_ptr_array_index(show_loop_list, show_four_displayed)));

    show_scroll_count = show_scroll_count - 1;

}
}
4

0 に答える 0