我正在编写一个通过 USB 与硬件通信的接口 Dll。为了完全满足硬件的时序要求(防止它在没有操作消息的情况下超时等),只要我的“Open()”方法被调用,我就会为每个延迟初始化创建一个工作线程。当我的“close()”方法被调用时,我设置了一个名为“terminate”的事件,该事件由工作线程监视并等待工作线程终止。终止最多需要几百毫秒,因为需要与硬件交换一些消息。
到目前为止一切顺利,唯一的问题是当程序在不调用我的“Close()”方法的情况下卸载 Dll 时......我通过在 DllMain(PROCESS_DETATCH)中设置“终止”事件解决了这个问题,我很确定我' m 允许做并且仍然完整填写最佳实践。唯一的问题是,如果 Dll 在没有调用 close 的情况下卸载但在旧工作线程终止之前再次重新加载,我会导致加载我的 Dll 的过程超时,因为我正在等待旧工作线程完成。
所以这是我的问题:如果我只在工作线程存在并且只有当我被卸载(通过freeLibrary)和不是当我的整个过程被终止时,我通过查看 lpvReserved 参数来测试?
另外:有没有更好的方法来解决我的问题?