我有一个使用我创建的 DLL 的多线程应用程序。如果 DLL 尚未运行某个函数,则某个函数将失败。我如何确保运行此应用程序函数的线程在继续之前等待该 DLL 函数完成?
可视化:
O = DLL 函数完成
T = 应用程序功能开始
应用线程:----------------O---------------------------- -----
DLL线程:--------------------T-------------------- -----
最佳答案
几种方法:
- 首先想到的是将代码放入 DLLMain() 中,它在应用程序/DLL 加载时自动执行。不过,并不是所有事情都可以在这里完成,比如阻塞操作或需要加载其他 DLL 的操作。如果您尝试这种方法,请务必阅读并理解文档。
- 第二个想法是 throw 或 assert(),这样 init 函数必须在任何其他函数之前被调用,例如 WSAStartup()。在创建任何其他线程之前,您必须在 main() 中调用一次。这是一个简单的方法。它需要手动工作,并且您不能在全局变量的 ctors 中创建线程(无论如何这总是危险的),但至少它会告诉您是否弄错了,并且假设使用 assert() 方法,发布的开销为零构建。
- 第三个变体是使用 Boost.Thread 的 One-time Initialization初始化,这似乎做你想做的事。
关于c++ - DLL 和应用程序之间的互斥锁共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882380/