c - GTK 3 GUI 从文本框中的单独线程文本倒计时更新
问题描述
第一篇文章,所以会尽量简短,直到需要添加更多。将应用程序从 macOS 移植到 NI LabWindows/CVI,在“C”中,然后移植到 GTK3,并尝试从外部线程概念掌握更新的 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;
}
解决方案
推荐阅读
- android - 如何以编程方式增加Android中快捷图标的大小
- unit-testing - 在控制器测试和无法创建 bean 期间出现“无法加载 ApplicationContext”错误
- java - 问题:连接到 MSSQL 数据库的 java 应用程序中的 com.microsoft.sqlserver.jdbc.SQLServerException
- python - 如何在我正在制作的游戏中显示颜色?
- javascript - 带有 React js 的实时加密表
- python - 局部范围变量在传递给 Jupyter Python 内核内部的 lambda 函数后变得未定义
- dialogflow-es - 是否可以创建一个所有数据都存储在欧盟的谷歌助手?(DSGVO?)
- notepad++ - 如何在记事本++中找到小于另一个值的值?
- python - Scrapy:Itemloader处理器/方法TypeError:'ItemMeta'对象不可下标
- javascript - 向表单中动态生成的文本框添加 jquery 验证