- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我最近在 C# 中看到了 EventWaitHandle 的强大行为,并决定在姊妹应用程序中移动一些功能来实现同样的功能。唯一的问题是姊妹应用是用 C 语言编写的。
没什么大不了的,我正在使用 pthreads,它有一个允许信号的 pthread_cond_t 数据类型。我唯一的问题是,是否有可能在等待某个 cond 之前“发出信号”?
现在我的测试表明没有。也就是说,如果 ThreadA 在 ThreadB 等待之前触发信号,则 ThreadB 将无限期地等待。我可以使用另一种 pthread 类型,它的行为更接近 C# 中 EventWaitHandle 的功能吗?对象已发出信号,这意味着第一个等待它的线程将立即通过,并将其设置为未发出信号。
将 pthread_cond 包装到另一个数据结构中并不难实现。但同样,pthread 库中是否已经提供了此功能?
最佳答案
如果您正确使用条件变量,这就没有关系。
代码的基本流程应该是(伪代码):
lock(lockobj);
while (!signalled) {
wait(condvar);
}
signalled = false;
unlock(lockobj);
在等待端,并且:
lock(lockobj);
signalled = true;
notify(condvar);
unlock(lockobj);
在信号方面。 (当然,双方使用的锁对象和条件变量必须相同。)希望对您有所帮助!
关于c# - pthread_cond_t 的 EventWaitHandle 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/143063/
我试图理解我在网上找到的这段代码: private EventWaitHandle wh = new AutoResetEvent(); private void WorkerThread() {
我有一个 C# 程序可以像这样打开一个 EventWaitHandle 以被 Windows 服务触发。 EventWaitHandle sampleEventHandle = new EventWa
注意:我受限于 .NET 3.5,所以我不能使用 ManualResetEventSlim。 我必须处理Spurious wakeups吗?当做这样的事情时: var waitHandle = new
我有两个 Windows 应用程序,一个是创建 EventWaitHandle 并等待它的 Windows 服务。第二个应用程序是一个 Windows gui,它通过调用 EventWaitHandl
EventWaitHandle 可以跨进程使用。并且自动和手动重置事件仅在单个进程内。你能确认一下吗? 文档说自动/手动是本地的,它们不采用名称参数。所以我认为它们仅适用于流程内。对了,他们能跨app
我正在编写一个监听串行端口的程序。我已经有代码利用 VCP 驱动程序(虚拟 COM 端口)打开串行连接,然后为接收到的任何数据添加事件处理程序。该代码大致如下所示: public void OpenP
在进程 A 中,我需要从进程 B 接收事件。我决定使用 EventWaitHandle。在这两个过程中,我都写了这段代码: var evhandle = new EventWaitHandle(fal
有没有办法知道调用了哪个EventWaitHandle。 我有两个带有 2 个不同系统范围事件名称的自定义类。 我有它们的原因是为了区分触发哪个函数。 我现在的问题是如何区分触发了哪个事件? Even
考虑以下 MyServer 端的代码片段 public void CreateEvent() { var serverReadyEvent = new EventWaitHandle(false
从 albahari atricle 学习多线程.在下面的示例中我需要锁 _locker 吗?我想不会,因为 _message 受 EventWaitHandle 保护。我说得对吗? class Tw
我需要更改当前代码,以便在调用 EventWaitHandle.WaitOne 时不阻塞当前线程。问题是我正在等待系统范围的事件。我还没有找到任何合适的替代品。 代码: EventWaitHandle
这个网站的新手,所以如果我没有以可接受的方式发帖请告诉我。 我经常按照下面的示例编写代码(为清楚起见,省略了 Dispose 之类的内容。)。我的问题是,是否需要如图所示的 volatile ?或者
我想找到一种方法将这两行结合起来: cancellationToken.WaitHandle.WaitOne() |> ignore waitHandle.WaitOne() |> ignore 无论
我只是好奇,系统范围的 EventWaitHandle 的命名是否有任何限制?我想使用 URL 作为一个名称,但它可能有大量奇怪的字符,我不希望它默默地失败或其他类似的情况,所以只需检查这里是否有任何
我最近在 C# 中看到了 EventWaitHandle 的强大行为,并决定在姊妹应用程序中移动一些功能来实现同样的功能。唯一的问题是姊妹应用是用 C 语言编写的。 没什么大不了的,我正在使用 pth
我想要 EventWaitHandle 对象(例如 ManualResetEvent),它只能从一个地方设置/重置,但可以从多个地方等待(使用 WaitOne())。换句话说,我希望只有一个类可以设置
我猜这是一种代码审查,但这是我对生产者/消费者模式的实现。我想知道的是,在 ReceivingThread() 或 SendingThread() 方法中的 while 循环是否会停止执行。请注意,E
我有一个如下所示的任务类,一个任务只有在其依赖任务完成后才能开始运行。 class MyTask { List dependentTasks; public TaskStatus St
class Process { static void Main(string[] args) { int threads = 0; int proce
我有 3 个线程,两个“ worker ”和一个“经理”。 “工作人员”线程在 EventWaitHandle 上等待,“经理”线程将在增加其计数器后向 EventWaitHandle 发出信号。这些
我是一名优秀的程序员,十分优秀!