这次我真的不知道如何提出我的问题......
我有一个QDialog作为主窗口的应用程序.应用程序从远程机器获得不同的值,如温度,湿度等.
为了开发,我添加了一个包含不同小部件的组框来模拟这些值.我向用户投掷警告和警报有不同的限制.
例如,如果温度上升超过30°C,那么我打开一个带有请求时间的QMessageBox(应用程序在远程机器上进行轮询)和当前温度.所以每个请求周期都会更新.
我使用show()方法调出消息框,使我的应用程序在后台运行.现在的问题是:焦点在消息框中,我的主窗口/ QDialog中没有任何内容可以被点击,直到消息框不被接受/已经完成.
这就是我的问题:在模拟模式下,我想要使用不同的温度值,我可以通过主窗口中的滑块来调整.如何访问这些小部件/使消息框以某种方式"不阻塞"?
最好的祝福,
马蒂亚斯
我刚刚开始使用协同程序,并阅读了gevent和greenlets.对于测试,我通过gevents pywsgi模块提供了此代码:
from gevent.pywsgi import WSGIServer
import gevent
def hello_world(env, start_response):
gevent.sleep(5)
start_response('200 OK', [('Content-Type', 'text/html')])
return ["<b>hello world</b>"]
print 'Serving on 8088...'
WSGIServer(('127.0.0.1', 8888), hello_world).serve_forever()
Run Code Online (Sandbox Code Playgroud)
我期望一个结果,每个请求在显示文本之前会有5秒的延迟.然而,发生的是每个请求都通过调用gevent.sleep()排队等候,如果第二个请求在第一个请求之后立即启动,则会使第二个请求花费大约10秒.
serve_forever函数不是为每个请求生成新的greenlets吗?
我正在写一个BlockingQueue,我想知道其他实现如何解决这个问题:
如果我只有一个监视器(队列对象)并让生产者和消费者wait,我将不得不确保notifyAll而不是notify被调用,否则生产者可能只发信号通知另一个等待生成器,即使队列已满.即使有东西可供消费者等待.另一方面,notifyAll对许多线程和处理器而言,调用似乎不是可扩展的解决方案.
不要BlockingQueues使用两台显示器?一个是生产者等待,一个是消费者等待?然后我将以封装的方式同步队列和相关监视器.这是要走的路吗?
为什么math.factorial在一个线程中表现得如此奇怪?
这是一个例子,它创建了三个线程:
它调用start线程,然后join超时
睡眠和旋转线程按预期工作并立即返回start,然后坐在join超时.
另一方面,析取线程start直到它运行到最后才返回!
import sys
from threading import Thread
from time import sleep, time
from math import factorial
# Helper class that stores a start time to compare to
class timed_thread(Thread):
def __init__(self, time_start):
Thread.__init__(self)
self.time_start = time_start
# Thread that just executes sleep()
class sleep_thread(timed_thread):
def run(self):
sleep(15)
print "st DONE:\t%f" % (time() - time_start)
# Thread that increments a number for a while …Run Code Online (Sandbox Code Playgroud) 我偶然发现我的用户遇到了用户阻止功能的问题.
我不知道怎么写我SELECT才能得到正确的结果.当User1阻止user2时,两个用户都看不到彼此的个人资料,但是当我登录时,我可以看到自己的帐户.我正在使用开关来执行此操作.
我的BLOCK表包括ID,USER1_ID,USER2_ID和STATUS.0被"看得见" 1并被"封锁".
Function.user
public function check_block($user1_id,$user2_id){
$check_sql= "SELECT ......";
$check_query = mysql_query($check_sql)or die(mysql_error());
$check_num = mysql_num_rows($check_query);
if($check_num>0){
$block = mysql_fetch_array($check_query);
return $block['status'];
}else{
return $check_num;
}
}
Run Code Online (Sandbox Code Playgroud)
开关
<?
$user1_id=$_SESSION['id'];
$user2_id=$data['id'];
$userblock = function_user_core::check_block($user1_id,$user2_id);
switch($userblock){
case 1:
echo'You Are Blocked From Viewing This Users Profile';
break;
}
?>
Run Code Online (Sandbox Code Playgroud)
字段在用户配置文件中被阻止
<? if($userblock==1) { ?>
THIS USER HAS BLOCKED YOU FROM THEIR ACCOUNT
<? } …Run Code Online (Sandbox Code Playgroud) 阻止坏,异步好,但在未来阻止仍然阻塞?这是我不断回归的事情; 考虑遵循伪代码:
def queryName(id:Id):Future[String]
def queryEveryonesNames:Future[Seq[String]] = {
val everyonesIds:Future[Seq[Id]] = getIds
val everyonesNames:Future[Seq[Future[String]]] = {
everyonesIds.map(seq.map(id=>queryName(id)))
}
// I'm trying to understand the impact of what I'll do below
everyonesNames.map(seq=>seq.map(fut=>blocking(fut, 1 s)))
}
queryEveryonesNames
Run Code Online (Sandbox Code Playgroud)
在最后一行我接通Future[Seq[Future[String]]](通知将来内将来)进入Future[Seq[String]]由阻塞在内部未来.
阻碍未来的未来感觉多余,至少在这里,但在未来拥有未来也感到多余.
你能提出一种更聪明的方式摆脱内心的未来吗?
你认为阻碍未来的未来是坏事吗?如果是这样的原因和在什么情况下?
我写了以下代码:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
private TextToSpeech mTTS;
@Override
protected void onPause() {
super.onPause();
if (mTTS != null) {
mTTS.stop();
mTTS.shutdown();
}
}
@Override
protected void onResume() {
super.onResume();
mTTS = new TextToSpeech(getApplicationContext(),
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
mTTS.setLanguage(Locale.ENGLISH);
mTTS.speak("Hello!", TextToSpeech.QUEUE_FLUSH, null);
}
}
});
}
public void onButtonClick(View view) {
mTTS.speak("Hello!", TextToSpeech.QUEUE_FLUSH, null);
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码:mTTS = new TextToSpeech(...冻结UI线程5-8秒.
我注意到延迟发生在logcat(第一行)的这一行:
07-13 …Run Code Online (Sandbox Code Playgroud) 我有一个Symfony 2.5应用程序,我有一些奇怪的请求并发问题.
为了演示这个问题,我创建了两个名为/timeand的路由/sleep.控制器的主体非常简单:
timeAction():
time();
sleepAction()
sleep(30);
Run Code Online (Sandbox Code Playgroud)
当我/time在浏览器中请求路由时 - 它会立即响应当前时间戳.但是,当我第一次请求/sleep路线然后/time路线时 - 它只是挂在那里直到sleep()完成.只有在此之后,/time控制器才会响应时间戳.换句话说 - 一个请求阻止所有其他请求.我一开始并没有注意到这一点,但是当你有长期执行计划的请求时 - 它变得明显.
这可能是什么原因?
我还是要自己做一些额外的测试来深入挖掘这种情况.我将尝试更详细地更新问题.
我已经读过Play是建立在Akka上的,所以我想知道,对于每个传入的请求,是否会产生一个演员服务.
以此控制器操作为例:
def upload = Action(parse.multipartFormData) { implicit request =>
request.body.file("picture").map { picture =>
val client = new AmazonS3Client
client.putObject("my-bucket", picture.filename, picture.ref.file)
}.getOrElse {
BadRequest("File missing")
}
}
Run Code Online (Sandbox Code Playgroud)
上传是同步发生的,而且我经常看到一些例子试图在Future中包装这样的代码块.我认为如果这个请求是由Akka演员提供的,那么就不需要这样做了.
如果我对或错,请告诉我,以及您对使用阻止服务的建议.
我正在为我的一个类编写一个JavaScript教程,我想说明一下调用堆栈可以阻止其他进程,并且在这种情况下,页面交互将排队,直到调用堆栈为空。
const print = function(){
console.log( "Hello World" );
}
setTimeout(print,0);
for(let i=0 ; i < 2000000000 ; i++);
console.log();Run Code Online (Sandbox Code Playgroud)
运行上面的代码后,我让他们单击链接并调整窗口大小,以查看该页面没有重新呈现,但是在Stack Overflow之类的许多网站上滚动似乎都可以正常工作。它在Reddit上被阻止。我已经在Chrome和Firefox上对此进行了测试,以仔细检查是否进行了一些优化,但是其表现类似。
我假设一个站点上没有与滚动相关的事件的事件处理程序,那么有一个用于基本滚动的特殊线程。这是因为我注意到带有粘性标头的站点将允许滚动,但直到循环结束后才具有粘性效果。