xiaoliton 发表于 2008-12-11 16:31:13

关于事件的问题

请问,怎样暂时关闭一个事件,又怎么打开这个事件
比如:在RS232接收到一个字节的数据后就产生一个事件,在进入该事件的回调函数后,对后来接收的数据就不能再产生事件了,所以要暂时关闭这个事件的产生,处理完了以后,又要打开,这个该怎么做呢?谢谢版主!

netcreature 发表于 2008-12-11 17:36:05

你对串口事件的概念理解不对!
事件是针对特定条件的,只有满足相应条件才能触发相应事件,条件不满足就不会触发相应事件。所以进入特定事件的回调函数后,不需要关闭这个事件,因为它只针对特定条件才再次触发。
如果如你所说,后面的数据会触发你不想触发的事件,那可能是因为你对事件的触发条件设置错误!这时候,你需要换一种思路了。

xiaoliton 发表于 2008-12-11 19:26:51

回复 2# netcreature 的帖子

谢谢版主提醒,我试试我的想法

yzbjw 发表于 2008-12-18 12:35:16

我也有楼主的经历,也是关于收数据然后写数据库,对于接收到的数据要关闭接受事件,然后去处理数据,然后再打开事件去接收下一组数据。

netcreature 发表于 2008-12-18 12:38:49

本帖最后由 netcreature 于 2008-12-18 12:46 编辑

楼上似乎混淆了中断和事件的概念!不能将中断处理机制套用到事件处理上去。

hondjean 发表于 2008-12-18 15:53:48

void CVICALLBACK ComCallback(int portNo, int eventMask, void *        );//串口回调函数前面申明用
InstallComCallback (Combit, 0x8000, 86, 0x88, ComCallback, NULL);//创建串口事件(第3个86就是串口数据86字节满足条件)
void CVICALLBACK ComCallback(int portNo, int eventMask, void *Callback_Data)
{
程序
}

netcreature 发表于 2008-12-18 16:15:28

本帖最后由 netcreature 于 2008-12-18 16:19 编辑

建议你先去了解一下中断机制和事件机制!
顺便看一下CVI串口回调事件中关于notifyCount的说明:
Set to detect when at least notifyCount bytes are in the input queue. Once this event has occurred, it does not trigger again until the input queue falls below and then rises back above notifyCount bytes
又何必要去关闭事件呢?而且这样做的最大害处是:极有可能错过应该处理得事件!
页: [1]
查看完整版本: 关于事件的问题