首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何等待句柄/ SafeHandle?

如何等待句柄/ SafeHandle?
EN

Stack Overflow用户
提问于 2017-08-31 23:07:40
回答 2查看 810关注 0票数 0

我有一个程序HANDLE,我是从P/Invoke的d中得到的,它在道义上相当于WaitForSingleObjectWaitOne,它很好地处理任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-31 23:39:39

我会将它封装在一个WaitHandle中,如下所示:

代码语言:javascript
复制
    private class MyWaitHandle : System.Threading.WaitHandle {
        public MyWaitHandle(IntPtr handle) {
            this.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle(handle, true   /*change to false if you will manually close your handle*/);
        }
    }

然后将p/调用的句柄传递到新的MyWaitHandle中,并通常等待它:

代码语言:javascript
复制
using (var myWaitThing = new MyWaitHandle(hSomeUnmanagedHandle)) {
     myWaitThing.WaitOne();
}

不确定在处理任务时需要什么样的细节,但是如果您希望在完成等待事件时完成任务,则启动一个Task,它只会等待WaitOne()返回,然后您可以像其他任务一样等待该Task

票数 4
EN

Stack Overflow用户

发布于 2021-03-20 22:21:12

从性能的角度来看,ThreadPool.RegisterWaitForSingleObject是您希望在这种情况下使用的。ThreadPool将使用单个线程对以这种方式注册的所有对象进行等待。

要将该API与流程句柄一起使用,您需要将其包装到WaitHandle中,如Tim中所示。

让它成为任务友好是有点棘手。使用Stephen的WaitHandleAsycFactory.FromWaitHandle库,或者查看实现,找出如何滚动自己的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45991276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档