当前位置: 技术问答>linux和unix
关于gtk多线程界面的问题
来源: 互联网 发布时间:2017-02-06
本文导语: 我写了个gtk程序,需要从后台不断的读一个值,有输出的话就显示在gtk的textview上, 这样读值的功能就只能用线程来实现, 于是我就想在线程中直接刷新textview的值,不过问题也由此出现了 问题情况如下所示 我在...
我写了个gtk程序,需要从后台不断的读一个值,有输出的话就显示在gtk的textview上,
这样读值的功能就只能用线程来实现,
于是我就想在线程中直接刷新textview的值,不过问题也由此出现了
问题情况如下所示
我在线程中更新了textview的textbuffer,
但是界面上不会显示,
经过试验发现界面上貌似必须有个事件去触发才会显示,
程序刚运行后,假如我不进行任何鼠标操作,则界面不刷新,
如果我是该窗口失去焦点,或者鼠标移动上面,或者按下按键,textview都会进行刷新值
我在网上查了很多资料,有说需要用gdb_threads_enter()和gdb_threads_leave的,我试过了无效
有说需要用
while (gtk_events_pending())gtk_main_iteration();
我也试过了,但有一定的概率出现错误导致程序退出
另外还有在线程中使用
gdk_window_process_all_updates();
但也有一定概率出现错误导致程序退出
本人初学gtk,望各位达人指教,小菜在此先谢过了
这样读值的功能就只能用线程来实现,
于是我就想在线程中直接刷新textview的值,不过问题也由此出现了
问题情况如下所示
我在线程中更新了textview的textbuffer,
但是界面上不会显示,
经过试验发现界面上貌似必须有个事件去触发才会显示,
程序刚运行后,假如我不进行任何鼠标操作,则界面不刷新,
如果我是该窗口失去焦点,或者鼠标移动上面,或者按下按键,textview都会进行刷新值
我在网上查了很多资料,有说需要用gdb_threads_enter()和gdb_threads_leave的,我试过了无效
有说需要用
while (gtk_events_pending())gtk_main_iteration();
我也试过了,但有一定的概率出现错误导致程序退出
另外还有在线程中使用
gdk_window_process_all_updates();
但也有一定概率出现错误导致程序退出
本人初学gtk,望各位达人指教,小菜在此先谢过了
|
我保证你还会有死锁的情况发生,呵呵