小编Tom*_*ume的帖子

为什么取消的Clojure期货继续使用CPU?

我有很多Java字节码的例子,我想从Clojure执行所有这些例子.每个字节码序列可能包含一个无限循环,在这种情况下,我想在几秒钟后停止运行它.我一直在期待将期货作为一种手段.在寻找几个实现后,我尝试了这两个代码:

(deref (future (loop[a 1] (recur a)) :done!) 1000 :impatient!)
Run Code Online (Sandbox Code Playgroud)

......以及https://gist.github.com/3124000上的代码

在这两种情况下,循环似乎都是适当的超时(在后一种情况下,未来报告已经完成和取消),但我看到我的CPU使用率上升到99%左右并保持在那里.我还看到每次运行此代码时,我的Java进程都会获得额外的线程.

在我看来,未来正在取消,但代码仍在运行.在我的程序中,我将需要运行和超时,一些非常紧密的无限循环(例如,相当于"20 PRINT GOTO 10"的Java字节码),我没有选择修改我正在运行的代码.

任何想法为什么我看到这种行为; 我能做些什么来阻止它; 还是替代方法让我实现运行和超时这样的代码的目标?

cpu profiling timeout future clojure

18
推荐指数
2
解决办法
2099
查看次数

如何将数据从BroadcastReceiver传递到正在启动的Activity?

我有一个Android应用程序需要在一天中偶尔被唤醒.

为此,我使用AlarmManager设置PendingIntent并使此触发器成为BroadcastReceiver.然后,此BroadcastReceiver启动一个Activity以将UI带到前台.

所有上述内容似乎都有效,因为Activity正确启动; 但是我希望BroadcastReceiver通知Activity它是由警报启动的(而不是由用户启动).要做到这一点,我正在尝试从BroadcastReceiver的onReceive()方法在intent的extras包中设置一个变量,因此:

    Intent i = new Intent(context, MyActivity.class);
    i.putExtra(wakeupKey, true);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

在我的Activity的onResume()方法中,然后我寻找这个布尔变量的存在:

protected void onResume() {
    super.onResume();

    String wakeupKey = "blah";      
    if (getIntent()!=null && getIntent().getExtras()!=null)
        Log.d("app", "onResume at " + System.currentTimeMillis() + ":" + getIntent().getExtras().getBoolean(wakeupKey));
    else
        Log.d("app", "onResume at " + System.currentTimeMillis() + ": null");
}
Run Code Online (Sandbox Code Playgroud)

onResume()中的getIntent().getExtras()调用总是返回null - 我似乎无法在此bundle中传递任何额外的东西.

如果我使用相同的方法将额外的东西绑定到触发BroadcastReceiver的PendingIntent,那么额外的东西就可以了.

任何人都可以告诉我将一个bundle从BroadcastReceiver传递给Activity有什么不同,而不是将bundle从一个Activity传递给一个BroadcastReceiver?我担心我可能会做一些非常明显错误的事情......

android bundle broadcastreceiver alarm android-intent

9
推荐指数
2
解决办法
2万
查看次数

如何从Web应用程序访问仅支持auth的Twitter API方法

我有一个iPhone的Web应用程序,它最终将在PhoneGap应用程序中运行 - 但是现在我在Safari中运行它.

该应用程序需要访问Twitter朋友的推文,包括私人推文.所以我使用Scribe库实现了OAuth.我成功地将用户反弹到Twitter,让他们进行身份验证,然后反弹.

此时,Web应用程序具有oAuth凭据(密钥和令牌),它在本地持久存在.从这里开始,我希望用户使用Twitter状态/ user_timeline.json方法来获取特定用户的推文.我有使用JSONP请求的应用程序成功执行此操作与未受保护的推文; 当它访问私人Twitter提要的时间轴时,应用程序中会出现HTTP基本身份验证对话框.

我相信我需要向Twitter提供OAuth凭据,以便我的Web应用程序可以识别和验证自己.Twitter建议通过添加HTTP Authorization标头来实现,但由于我正在使用JSONP请求,我认为这不是我的选择.我是否正确地假设这个?

因此,我的选项似乎是将oAuth凭证作为查询字符串参数(Twitter建议反对,但文档建议仍然支持); 或通过中间服务器代理所有推文.我宁愿避开后者.

我使用表单的URL访问Twitter API

http://api.twitter.com/1/statuses/user_timeline.json?user_id=29191439&oauth_nonce=XXXXXXXXXXX&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1272323042&oauth_consumer_key=XXXXXXXXXX&oauth_signature=XXXXXXXXXX&oauth_version=1.0

当user_id是公共用户时,这可以正常工作.当user_id是私人用户时,我会获得HTTP Basic Auth对话框.知道我做错了什么吗?我希望它像"忘记一个重要的参数"一样令人尴尬地简单......

api twitter json oauth jqtouch

6
推荐指数
1
解决办法
4914
查看次数