作者atst (电脑无法阻止人类做蠢事)
看板MacDev
标题Re: [问题] 关於cocoa 的notification
时间Tue Jul 1 18:32:49 2008
※ 引述《mimic0310 (天使与魔鬼)》之铭言:
: 我在写一个 跟usb device 有关的 cocoa application
:
: 参考 /Developer/Examples/IOKit/usb/USBNotification Example
: 用这个function: IOServiceAddMatchingNotification
:
: 我利用CFRunloop 和 Notification 去抓USB device被拔掉的event
: 然後会去呼叫一个 callback function 做一些 clean
: 拔掉的时间点 是完全不一定的 有可能跑到一半 就被拔掉
: 实做完之後却发现 如果正跑到一半
: 这个notification 的 callback function 不会在拔掉event发生的第一时间去呼叫
: 而是跑完之後才call
: 我在想我是不是用错东西了 我想要的是再拔掉的那瞬间 就进入我注册的callback
: 不知道有没有大大能够给我一点线索...感恩
稍微看了一下,你应该没有用错函式,只是你可能不清楚notification实作上也是有
其极限的.
首先,不论是Cocoa 或是 Carbon 的notification,都是注册在RunLoop中的.
意思就是说, 如果你拔掉device的时间点,正好在前一个检查结束後的那个点上的话,
不论再怎麽快速,都得等到下一个loop,才会发出notification.
若之後的
某一个程序,需要比较久的时间,那你所等待的时间会更久.
所以,这里你可以检查一下你文中"跑到一半"的function,里面到底做了什麽?
移除一部分耗时的动作再测看看.
或者,如果你的function与notification在同一个runloop中,试着将之移到另一个thread.
这样应该能找出问题所在.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.229.27.232