1 |
|
Lua二进制扩展多线程任务回调做法
摘要
我希望在lua脚本中执行http请求,然后在注册的回调函数中异步的处理response,http请求任务以队列的形式进行排队,每次只有一个任务在执行。
lua本身是没有提供多线程支持的,虽然它支持协程,但本质是在单个线程内进行切换,本质不是并行。
lua可在不同线程中创建独立的lua状态机,而lua_newthread可根据已有lua状态机创建一个有独立调用栈的独立状态机(它们共享全局环境、注册表和栈空间),可以利用这两个特性来实现异步回调。
实现方法
二进制模块中使用libcurl库来执行http请求
初始化
模块命名为async_request,在luaopen_async_request中完成创建模块、初始化libcurl、创建任务线程以及等待创建新线程使用的lua状态机。
1 | static void routine(std::promise<void*>* p) |
注册回调函数
Qt-5.15.2- QtWebEngine编译
重新编译QWebEngine
因为腾讯的WebRTC需要h264解码,官方的QWebEngine默认是没有启用的,所以需要用-webengine-proprietary-codecs开关重新编译QWebEngine
https://doc.qt.io/qt-5/qtwebengine-features.html#audio-and-video-codecs
确定PyQt版本
比如目前用的是5.15.2,需要更新打包环境的相关包:
1 | pip install PyQt5==5.15.2 |
安装编译环境依赖
1. 安装qt framework and tool
5.15.2是没有官方离线包的,所以只能通过官方的安装工具来下载,选择以下组件(Sources必须选择,因为编译需要源码)
Qt 5.15.2
chrome自带网页长载图
F12调出DevTools之后,按快捷键Ctrl + Shift + P输入命令Capture full size screenshot