gpt4 book ai didi

c++ - DLL 和应用程序之间的互斥锁共享

转载 作者:行者123 更新时间:2023-11-30 01:57:17 29 4
gpt4 key购买 nike

我有一个使用我创建的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com