gpt4 book ai didi

c++ - 从主线程向工作线程发送信号时出现问题

转载 作者:行者123 更新时间:2023-11-28 04:55:07 24 4
gpt4 key购买 nike

我必须对输入文件(1...N)执行 OperationA,然后我必须对 operationA 完成的文件执行 OperationB。

所以在主线程中,我遍历了每个文件(1...N)并执行操作 A。然后将文件推送到线程安全队列并继续处理下一个文件。工作线程从队列中获取文件并执行操作 B。为了实现这一点,我使用了如下事件:

HANDLE hEvent =CreateEvent(NULL, FALSE/*autoreset*/, FALSE/*nonsignaled*/, "");
for( files 1... N)
{
1. Operation A
2. Push file to the queue
3. SetEvent( hEvent )
}

WorkerThread()
{
while(1)
{
1. WaitforSingleObject( hEvent , INFINITE )
2. operation B
}
}

我期望的是,对于每个 SetEvent(),WaitforSingleObject() 都将发出信号。但实际行为并非如此。即对于第一个 SetEvent,WaitforSingleObject 发出信号。当 operationB 正在进行时,许多 SetEvents 从主线程触发。因此下一个 WaitforSingleObject() 应该没有任何延迟地发出信号,因为第二个 SetEvent 已经被触发。但这并没有按预期工作。

  • 设置事件
    • 等待单个对象
  • 设置事件
  • 设置事件
  • 设置事件
    • 等待单个对象
  • 设置事件
  • 设置事件
    • 等待单个对象

我为 6 个文件调用了 6 个 setevent。但是 WaitforSingleObject 仅在 3 时发出信号。

首先请让我知道我是否为上下文使用了正确的同步机制?

最佳答案

这是生产者-消费者问题,你可以用信号量来解决。

检查此链接 https://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem

您的代码在链接中的实现不充分。

使用信号量,代码将按预期运行。

关于c++ - 从主线程向工作线程发送信号时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322155/

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