繁体   English   中英

DLL和应用程序之间的互斥共享

[英]Mutex sharing between DLL and application

我有一个使用我创建的DLL的多线程应用程序。 如果DLL尚未运行某个功能,则某个功能将失败。 如何确保运行此应用程序功能的线程在继续之前等待该DLL函数完成?

可视化:

O = DLL函数完成

T =应用程序功能启动

App Thread:-------------- O -------------------------------- -

DLL Thread:---------------------- T ------------------------ -

几种方法:

  • 首先想到的是将代码放入DLLMain()中,这是在应用程序/ DLL加载时自动执行的。 但并非所有事情都可以在这里完成,比如阻止操作或需要加载其他DLL的操作。 如果您尝试这种方法,请务必阅读并理解文档。
  • 第二个想法是throw或assert(),因此必须在任何其他函数之前调用init函数,比如WSAStartup()。 然后,在创建任何其他线程之前,您必须在main()中调用一次。 这是一种简单的方法。 它需要手动工作,你不能在全局变量的内部创建线程(这总是很危险),但至少它会告诉你,如果你弄错了,假设assert()方法,释放的开销为零建立。
  • 第三种变体是使用Boost.Thread的一次性初始化初始化,它似乎可以做你想要的。

您可以使用命名事件。

为应用程序和DLL创建一个事件,以便首先共享:

HANDLE myEvent = CreateEvent(NULL, false, false, L"MyEvent");

表示完全使用:

SetEvent(myEvent);

等待完成使用:

WaitForSingleObject(myEvent, INFINITE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM