- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个双线程应用程序:GUI 和一些后台工作。我正在尝试向主线程发送请求以进行 GUI 更新(移动进度条),但它似乎不起作用。我把它归结为一个非常小的例子:
import pygtk
pygtk.require('2.0')
import glib
import gtk
import threading
import sys
import time
def idle():
sys.stderr.write('Hello from another world.\n')
sys.stderr.flush()
gtk.main_quit()
def another_thread():
time.sleep(1)
glib.idle_add(idle)
thread = threading.Thread(target=another_thread)
thread.start()
gtk.main()
我认为这应该从主/GUI 线程向标准错误打印一些内容,但什么也没有发生。而且它也不会退出,所以 gtk.main_quit
不会被调用。
此外,向 stderr
添加更多输出的行为很奇怪。如果我将线程的功能更改为:
sys.stderr.write('----\n')
sys.stderr.write('----\n')
sys.stderr.flush()
sys.stderr.write('After.\n')
sys.stderr.flush()
我看到 1,有时 2 行输出。主线程进入 gtk.main
看起来像是某种竞争条件,但我不知道为什么会这样。
最佳答案
在多线程环境中使用 glib 之前,您需要初始化 glib 的线程支持。只需调用:
glib.threads_init()
在调用 glib 函数之前。
关于python - gtk idle_add 没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579221/
我有一个双线程应用程序:GUI 和一些后台工作。我正在尝试向主线程发送请求以进行 GUI 更新(移动进度条),但它似乎不起作用。我把它归结为一个非常小的例子: import pygtk pygtk.r
我有一个 GTK 窗口。事实证明,如果我从一个单独的线程使用 idle_add(window.queue_draw) 一次安排多个重绘调用,没有任何延迟,则只会执行一个调用。 如果我执行 idle_a
我的 PyGTK 应用程序中有两个线程: 运行 GTK 循环并执行所有 GUI 工作的主线程 处理网络请求等的另一个线程 我需要让第二个线程从第一个线程获取一些信息,所以我调用: variable =
是否有任何明确的文档说明 idle_add()/timeout_add() 和/或它们安装的实际回调是否需要锁(任何类型)? def work(*args): # (1) gtk.gdk.thre
我是一名优秀的程序员,十分优秀!