gpt4 book ai didi

c++ - Win 事件替换为 boost 信号(线程安全)

转载 作者:行者123 更新时间:2023-11-30 03:55:08 25 4
gpt4 key购买 nike

我想用可移植的东西改变 win32 事件,所以我决定使用 boost.signals2。

现在我有这样的东西:

ret = WaitForMultipleObjets
{
switch(ret)
{
case Timeout: something; break;
case Event1: something; break;
case Event2: something; break;
}
}

我认为用类似的东西替换它是个好主意:

for(;;)
{
Execute code from timeout, if event occurs interrupt and execute
code which is responsible for event handling
}

但我不知道如何实现它。也许我可以将 lambda 插槽与信号连接起来并导致超时代码中断(通常的例程)。

最好的问候

最佳答案

我尝试移植 https://github.com/NeoSmart/PEvents在 boost 上,但如果你在多个地方等待同一个事件,它可能会导致作用域锁死锁(当你在 boost 中等待 cond var 时这是必要的)。

所以这次我尝试这样的事情:

for(;;)
{
auto c = signal.connect([]()
{
ThreadHandle->interrupt();
//code for handling event1
});

try
{
//code for timeout
}
catch (boost::thread_interrupted&)
{
//thread interrupted by signal listener
boost::this_thread::sleep_for(boost::chrono::milliseconds(1000));
}
}

当信号被“捕获”时,我会中断主流(超时)并执行事件发生时应该执行的操作。

关于c++ - Win 事件替换为 boost 信号(线程安全),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29204956/

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