最近再次看了消息队列,突然发现消息出队这个函数的强大,以前一直是直接拿过来使用,没有关注它内部是如何实现的,现在想模拟一个这样的东西。各种方法都想过了,都不知道它是如何实现的。它在有消息时,立即返回消息,没有消息时,就在那里死等,但是又没有占用CPU,这就奇怪了,既然是死等,按照传统的概念,里面一定有一个WHILE循环在哪里运行才对。但是这样的话,多申请几个出队函数,CPU就挂掉了,但是我实验了一次申请几百个出队的函数,CPU就像不知道有这个循环一样,所以我判断内部一定不存在这个循环,只有可能存在LV内部的一个总的循环内,当检测到这个队列有消息时,而且有消息出队申请时,就将结果返回给这个出队的地方。但是出队这个函数是怎么实现在这里死等的呢?
我尝试想用调用VI时挂起这个属性,但是挂起后,这个会弹出该VI的界面,而且后台也没有让它返回给调用者的命令,只有在前面板可以操作。
有没有其它的方法可以实现这个类似的功能,BU占CPU这个功能真的强大。
目前我用VI的暂停属性实现了一个类似的效果,但是当程序运行到这个暂停的VI时,会弹出这个暂停VI的界面,这点好像目前无法解决,我把源码附上来,希望有高手帮忙解惑,看看有没有其它可行的方案。