以下程序的存储器分析表明,noleak函数在常量存储器中运行,而泄漏函数以线性方式泄漏存储器.dflemstr表明这可能是由于RWST导致无限的分配链.是这种情况还有其他解决方案吗?我实际上不需要Writer monad.
环境:
ARCH 64位GHC 7.8.3
ghc Pipe.hs -o Pipe -prof
import Control.Concurrent (threadDelay)
import Control.Monad (forever)
import Pipes
import Control.Monad.Trans.RWS.Strict
main = leak
effectLeak :: Effect (RWST () () () IO) ()
effectLeak =
(forever $ do
liftIO . threadDelay $ 10000 * 1
yield "Space") >->
(forever $ do
text <- await
yield $ text ++ (" leak" :: String)) >->
(forever $ do
text <- await
liftIO . print $ text
)
effectNoleak :: Effect IO () …Run Code Online (Sandbox Code Playgroud) 我正在用C/C++编写一个用于蓝牙低功耗设备的库.到目前为止,我一直在使用Bluez公开的D-Bus接口,并能够发现,连接并与设备通信.
但是,当设备由于链路故障或超出范围而断开连接时,重新连接到它并非易事.理想情况下,我希望能够创建到所有断开连接的设备的挂起连接,但Bluez似乎不支持这一点.似乎Bluez只支持一个同时连接呼叫,在15-20秒后超时.
因此,解决方案是监听广告包,并在检测到已知设备时进行连接.#bluez上的优秀人员告诉我,这已经实现了,实现它的方法是使用GattManager1 RegisterProfile方法注册实现GattProfile1的对象.尝试此操作没有结果,设备在链接失败后保持断开连接.它的记录也很差,所以我很有可能错过了一些东西.
我的问题是:这是正确的解决方案吗?它会提供无缝和快速的重新连接吗?如果是的话,会出现什么问题?
我真的很喜欢 android.support.annotations 库中提供的 @WorkerThread/@UIThread/@AnyThread 注释。我想在 java 项目中实现类似的东西。但是,我无法找到注释处理器的来源。有谁知道在哪里查看或有关于如何实施的建议?