GTK 3 GUI обновлен из отдельного текстового обратного отсчета потока в текстовом поле - PullRequest
0 голосов
/ 21 января 2020

Первый пост, поэтому постараюсь быть кратким, пока не нужно будет добавить еще. Портировал приложение из macOS в NI LabWindows / CVI, в "C", затем портировал на GTK3 и пытался получить asp обновление GUI из концепции внешнего потока. Я читал документацию по gnome и искал здесь и везде, но не нашел аналогичного использования или не схватил обновление GUI из отдельного потока. Я экспериментировал с g_idle_add () следующим образом.

int main(int argc, char* argv[])
{
    gtk_init(&argc, &argv); // init Gtk
    gtk_start_button = GTK_WIDGET(gtk_builder_get_object(builder,"start_button"));
    gtk_main();

    return EXIT_SUCCESS;
}

void start_button_clicked_cb(GtkWidget *widget, gpointer data)
{
    printf("\nStart Button Pressed\n");

    run_tests();
}

void run_tests( void )
{
    GThread *start_testing_thread;
    start_testing_thread = g_thread_new("", &start_testing, NULL);
}

void *start_testing (void *data)
{
    pause(5);
}

void pause( double pause_time)
{
    char    string[33];

    while( (double)pause_time > (double)0 )
    {
        sprintf( string, "Pausing %02.1f", pause_time );
        printf(string);


        //test_name( string );
        g_idle_add(test_name_gui, string);

        g_usleep(100000);   // uSecs for 100 mSecs

        pause_time -= 0.1;
    }
}

void test_name_gui(gpointer user_data)
{
    GtkTextBuffer*      buffer = gtk_text_buffer_new(NULL);
    char                temp[99];
    int error = -1;

    buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (gtktextview_test_name));

    sprintf(temp,"\n%s gui\n",(char*)user_data);
    printf(temp);

    if(!g_utf8_validate(user_data,-1,NULL))
    {
        error = 3;
    }

    gtk_text_buffer_set_text (buffer, (char*)user_data, -1);

    printf("\nTest Name gui\n");

    g_object_unref(buffer);

    return G_SOURCE_REMOVE;
}
...