首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure RTOS如何用单事件向多线程发送信号?

Azure RTOS如何用单事件向多线程发送信号?
EN

Stack Overflow用户
提问于 2021-04-27 22:27:41
回答 2查看 126关注 0票数 0

我想用一个事件给多个线程发信号,最好的方法是什么?例如:只要经过1秒,RTC中断就会发生,并设置其相关事件标志,之后等待该事件的线程将开始运行,并完成其工作。

代码语言:javascript
复制
RTC interrupt:    
    tx_event_flags_set (&rtc_events, 1_SEC_PASS, TX_OR);

1st Thread: 
    tx_event_flags_get (&rtc_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);

2nd Thread: 
    tx_event_flags_get (&rtc_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);

如果我这样使用它,只有一个线程会收到通知。我可以为同一个RTC事件使用多个事件标志,但这一次RTC将依赖于线程,这在松散耦合方面是不好的。

代码语言:javascript
复制
RTC interrupt:    
    tx_event_flags_set (&first_thread_events, 1_SEC_PASS, TX_OR);
    tx_event_flags_set (&second_thread_events, 1_SEC_PASS, TX_OR);

1st Thread: 
    tx_event_flags_get (&first_thread_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);

2nd Thread: 
    tx_event_flags_get (&second_thread_events, 1_SEC_PASS, TX_OR_CLEAR, &flag_val, TX_WAIT_FOREVER);

这些方法中哪一种最好?在更好的软件设计方面,有没有第三种方法来解决这个问题?还是我太担心了?

请给我一些建议。

EN

回答 2

Stack Overflow用户

发布于 2021-04-28 00:57:05

事件标志是一个非常基本的概念,并不真正适合于通知多个线程(如您的第一个示例)。

您的第二个示例是正确的方法,您需要为每个要更新的线程设置一个标志。

如果您的应用程序需要进一步的解耦,那么您可能希望转移到某种形式的发布/订阅模型,在这种模型中,线程可以显式地订阅它们感兴趣的消息,而RTC线程将发布消息。

票数 1
EN

Stack Overflow用户

发布于 2021-04-28 01:44:06

莱恩是对的。您也可以在一个组中有多个标志,即您不需要像在第二个示例中那样创建两个组。

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

https://stackoverflow.com/questions/67285066

复制
相关文章

相似问题

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