我想改进一些现有的项目(VICE,一个c64模拟器)。
在此模拟器中,我们可以使用 ffmpeg dll 录制模拟器屏幕。 这里的问题是,这些 dll 与模拟器本身在同一线程中运行。这显然是不幸的,录制应该是实时发生的,而模拟器却保持在 100% 的速度运行。
当前代码只是使用简单的
加载所有dllLoadLibrary(name);
所以我的问题是:是否可以将所需的 ffmpeg dll(其中 5 个)加载到新线程中?
我搜索了很多,但未能找到真正对我有帮助的东西。 虽然我发现了
GetProcAddress
,CreateThread
之类的东西,乍一看看起来很有希望......
可以执行类似 CreateRemoteThread 注入的操作,即强制将 LoadLibrary 强制转换为 LPTHREAD_START_ROUTINE 或实现一个非常薄的包装器,并将库名称放置在非本地内存中的某个位置,然后将其用作线程参数。
然而,要认识到库和线程之间确实没有太多关系。需要了解(和控制)的重要事情是从哪个线程调用库的函数。如果程序将库函数作为特定线程的一部分调用,那么使用不同的线程强制加载它不会产生任何区别,这些库调用仍将作为调用线程逻辑的一部分进行。