将 DLL (ffmpeg) 作为新线程加载

问题描述 投票:0回答:1

我想改进一些现有的项目(VICE,一个c64模拟器)。

在此模拟器中,我们可以使用 ffmpeg dll 录制模拟器屏幕。 这里的问题是,这些 dll 与模拟器本身在同一线程中运行。这显然是不幸的,录制应该是实时发生的,而模拟器却保持在 100% 的速度运行。

当前代码只是使用简单的

加载所有dll
LoadLibrary(name);

所以我的问题是:是否可以将所需的 ffmpeg dll(其中 5 个)加载到新线程中?

我搜索了很多,但未能找到真正对我有帮助的东西。 虽然我发现了

GetProcAddress
CreateThread
之类的东西,乍一看看起来很有希望......

multithreading winapi ffmpeg
1个回答
0
投票

可以执行类似 CreateRemoteThread 注入的操作,即强制将 LoadLibrary 强制转换为 LPTHREAD_START_ROUTINE 或实现一个非常薄的包装器,并将库名称放置在非本地内存中的某个位置,然后将其用作线程参数。

然而,要认识到库和线程之间确实没有太多关系。需要了解(和控制)的重要事情是从哪个线程调用库的函数。如果程序将库函数作为特定线程的一部分调用,那么使用不同的线程强制加载它不会产生任何区别,这些库调用仍将作为调用线程逻辑的一部分进行。

© www.soinside.com 2019 - 2024. All rights reserved.