rt-thread icon indicating copy to clipboard operation
rt-thread copied to clipboard

wait queue 中 __wqueue_default_wake 永远返回的是 0

Open whj4674672 opened this issue 4 years ago • 5 comments

在等待队列使用的时候会

int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
{
    __wait.polling_thread = rt_thread_self();
    __wait.key = 0;
    __wait.wakeup = __wqueue_default_wake;

但是 wake up 这个函数的设计初衷应该是由用户自己来实现这个唤醒函数吧,但是这里默认写了永远返回 0,看起来这个设计是不合理的。

int __wqueue_default_wake(struct rt_wqueue_node *wait, void *key)
{
    return 0;
}

那么设计这个函数的时候,是不是可以考虑增加一个形参或者其他的方式,让用户可以自定义自己的 wake up 函数。

whj4674672 avatar Feb 22 '21 02:02 whj4674672

就是让用户来实现另外的,否则就只能是这个用于default 0。

BernardXiong avatar Feb 22 '21 13:02 BernardXiong

那么在 rt_wqueue_wait 的时候怎么把用户的函数指针传递进来呢?

whj4674672 avatar Feb 22 '21 15:02 whj4674672

现有的方式,需要修改 waitqueue.c 的代码。让用户自己传递自己的 wake up 是否更合理

whj4674672 avatar Feb 23 '21 01:02 whj4674672

直接结构体赋值,或者再加个API?

BernardXiong avatar Feb 25 '21 16:02 BernardXiong

加个 API 的方式不会对原来的代码产生任何影响

whj4674672 avatar Feb 26 '21 03:02 whj4674672