pyFLTK 函数`Fl.wait()` 阻塞所有线程

Posted

技术标签:

【中文标题】pyFLTK 函数`Fl.wait()` 阻塞所有线程【英文标题】:pyFLTK function `Fl.wait()` blocks all threads 【发布时间】:2014-01-18 17:02:38 【问题描述】:

在使用 pyFLTK 编写多线程应用程序时,我发现了一个奇怪的问题:当我调用 Fl.wait() 时,所有线程都会停止,直到出现另一个 FLTK 事件。作为一种解决方法while Fl.check(): time.sleep(0.01) 有效,但我更喜欢简单地使用Fl.run()

我正在使用 pyfltk-1.3.0 和 python-2.7.6

【问题讨论】:

【参考方案1】:

尝试拨打Fl::lock(); /* your code here */; Fl::unlock();

这篇短文解释了基于 FLTK 1.3 的应用程序中的并发编程:http://www.fltk.org/doc-1.3/advanced.html#advanced_multithreading。

【讨论】:

如果我正确理解了那篇文章,那么 Fl::lock() 和 Fl::unlock() 只需要在从多个线程访问 FLTK 函数时使用。我正在做的是只运行一个对 FLTK 执行任何操作的线程和另一个执行完全独立的事情的线程(而 True:print('X'))。当我使用 Fl.run() 时,第二个线程停止执行。 这确实是一种奇怪的行为。我在 FLTK 上从来没有遇到过这样的问题,所以真的帮不上忙……:(

以上是关于pyFLTK 函数`Fl.wait()` 阻塞所有线程的主要内容,如果未能解决你的问题,请参考以下文章

当鼠标悬停而不是 pyFLTK 中的小部件时如何调用函数?

如何在 FLTK 库中使用 Fl::awake

pyFLTK (python v2.7, pyFLTK 1.3): ImportError: DLL load failed: 找不到指定的模块

pyFLTK 菜单栏中是不是可以有图标?

如何在 pyFltk 中使用 Fl_Tabs

阻塞的 Python 异步函数调用也会阻塞另一个异步函数