2 回答
TA贡献1876条经验 获得超7个赞
由于这个问题没有足够的吸引力,我决定发布我在尝试解决此问题时发现的自己的解决方案。这不会被标记为答案,因为其他人可能会提供更好的解决方案。
我提出UI过程中的一个(即部分使用系统托盘)到另一个二进制和使用调用它cmd := exec.Command(...)
和cmd.Start()
后来我管stdin
,并stdout
与那些通过这个子进程进行通信。
示例代码可以在Github上找到。警告在这个要点中有一个错误,在子进程退出后,主进程将开始消耗 CPU 周期。随意自己修复它。
我不想通过 RPC 的原因是因为这对于我想要实现的目标来说会变得有点过于复杂,并且没有提供简单的方法来进行双向通信。
TA贡献1828条经验 获得超13个赞
看起来您使用的两个库都正确用于runtime.LockOSThread
进行仅主线程 API 调用;不幸的是,要使用多个这样的库,您必须做一些比提供的示例代码更有趣的事情。您需要编写自己的主线程/main.Main
调用消息循环来处理对多个 MTO API 的调用。
runtime.LockOSThread
是使用此类 API 进行操作的解决方案的一部分;golang wiki有一个关于如何使用它与“仅从主线程调用”API 交互的页面。
关于你的程序应该如何改变的极短的描述:
您需要使用runtime.LockOSThread
inmain.init
来确保主线程正在运行main.Main
;main.Main
应该重构为两部分:
启动一个 goroutine 或 goroutines 运行之前的内容
main.Main
;进入消息循环接收消息以在一个或多个通道上执行某些主线程操作
- 2 回答
- 0 关注
- 131 浏览
添加回答
举报