我的程序需要调用一个第三方 C++ 写的函数 Func_from_CPP() 这个函数用了一个 WaitForSingleObject 函数,大概要处理 3 到 5 秒才能处理完成返回, 所以导致我的 UI 会被 block 掉。
所以我就想把这个函数丢到 Thread 或者 Gevent 里面去处理,等处理完成再异步通知我去对返回数据处理。
但是,奇怪的是,不管我用 thread 还是 gevent , UI 始终都是被 block 掉,都需要等函数处理完成才能返回。
是不是因为 Python 本身对线程的支持不够,导致对于 WaitForSingleObj 这样的函数,不管是否使用工作线程 /协程序,它始终是会让主线程处于等待状态?
大致代码如下:
CPP
————————————————————————————
result Func_from_CPP()
{
waitforsomeevent() //WaitForSingleObject
dowork()
return reuslt
}
python
————————————————————————————
def Work(self):
Func_from_CPP()
def onbuttonClicked(self):
Work() //直接掉用,函数调用这几秒 UI 会挂掉
threading.thread(
self.Work)
threading.start() //尝试用线程来做, UI 仍然挂掉
gevent.spawn(
self.Work)
gevent.sleep(0) // 第三次尝试 gevent UI 仍然挂掉
是我打开姿势不对吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://ex.noerr.eu.org/t/310529
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.