Tag: 阻塞

将asynchronous计算包装成同步(阻塞)计算

类似的问题: 包装一个asynchronousJavaScript函数使其同步的模式 在C#中同步包装asynchronous方法 我有一个方法,我想暴露给图书馆客户端(尤其是脚本客户端)的对象如下所示: interface MyNiceInterface { public Baz doSomethingAndBlock(Foo fooArg, Bar barArg); public Future<Baz> doSomething(Foo fooArg, Bar barArg); // doSomethingAndBlock is the straightforward way; // doSomething has more control but deals with // a Future and that might be too much hassle for // scripting clients } 但是我可用的原始“东西”是一组事件驱动的类: interface BazComputationSink { public void onBazResult(Baz […]

Firebug Net Panel中“Blocking”的含义是什么?

我使用的是Firebug 1.5.2,在生产发布之前testing一个站点时,我可以看到“阻塞”部分请求所消耗的大量时间。 “阻塞”是什么意思?

你将如何实现一个基本的事件循环?

如果你已经使用了gui工具箱,那么你知道有一个事件循环/主循环应该在所有事情完成之后执行,并且会保持应用程序的活动并响应不同的事件。 例如,对于Qt,你可以在main()中做到这一点: int main() { QApplication app(argc, argv); // init code return app.exec(); } 在这种情况下,app.exec()是应用程序的主循环。 实现这种循环的明显方法是: void exec() { while (1) { process_events(); // create a thread for each new event (possibly?) } } 但是这将CPU限制到100%,实际上是无用的。 现在,我怎样才能实现这样一个响应而不用吃CPU的事件循环呢? 在Python和/或C ++中赞赏答案。 谢谢。 脚注:为了学习,我将实现自己的信号/插槽,并使用它们来生成自定义事件(例如, go_forward_event(steps) )。 但是,如果您知道如何手动使用系统事件,我也想知道这一点。

asynchronous,非阻塞,事件库架构有什么区别?

有什么区别: asynchronous , 不阻塞 ,和 基于事件的体系结构? 可以是asynchronous和非阻塞 (和基于事件的 )? 什么是最重要的编程,有一些东西:asynchronous,非阻塞和/或事件的基础(或所有3)? 如果你能提供例子,那就太好了。 这个问题被问到,因为我正在阅读这个伟大的StackOverflow文章上类似的话题,但它不回答我上面的问题。

如何中断阻塞在take()上的BlockingQueue?

我有一个类从BlockingQueue中获取对象,并通过连续循环调用take()来处理它们。 在某些时候,我知道没有更多的对象会被添加到队列中。 如何中断take()方法,使其停止拦截? 以下是处理对象的类: public class MyObjHandler implements Runnable { private final BlockingQueue<MyObj> queue; public class MyObjHandler(BlockingQueue queue) { this.queue = queue; } public void run() { try { while (true) { MyObj obj = queue.take(); // process obj here // … } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } 这里是使用这个类来处理对象的方法: public void […]

如何在Android应用程序开发中阻止手机号码和消息接收?

我想实现一个应用程序阻止手机号码接收或发送电话和消息。 在我的应用程序中,我在EditText框中input手机号码,然后点击一个button来阻止用户input的手机号码。 我已经实施了一个活动课程如下: public class BlockNumberActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ((Button)findViewById(R.id.block)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String mobileNumer = ((EditText)findViewById(R.id.mobileNum)).getText().toString(); //How to block entered mobileNumber } }); ((Button)findViewById(R.id.unblock)).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { […]

Java InputStream阻塞读取

根据java api, InputStream.read()被描述为: 如果由于到达stream的末尾而没有字节可用,则返回值-1。 此方法阻塞,直到input数据可用,stream的末尾被检测到,或抛出exception。 我有一个while(true)循环做一个读取,我总是得到-1,当没有什么是通过stream发送。 这是预料之中的。 我的问题是什么时候会读()永远阻止? 因为如果它没有得到任何数据,它将返回-1。 我希望阻塞读取等待,直到收到数据。 如果你已经到达了inputstream的末尾,不应该只读()只是等待数据而不是返回-1? 或者如果有另一个线程访问stream,并且你的read()不能访问这个stream,那么read()只会被阻塞吗? 这导致我的下一个问题。 我曾经有事件监听器(由我的库提供)在数据可用时通知我。 当我被通知时,我会调用while((aByte = read()) > -1)存储字节。 当我在非常接近的时间里得到两个事件时,我感到困惑,并不是所有的数据都被显示出来。 似乎只显示第二个事件数据的尾部,剩下的部分不见了。 我最终改变了我的代码,所以当我得到一个事件时,我会调用if(inputStream.available() > 0) while((aByte = read()) > -1)存储字节。 现在它工作正常,我的所有数据都显示出来了。 有人可以解释这种行为吗? 据说InputStream.available()返回阻塞下一个(stream的)调用者之前可以读取的字节数。 即使我不使用.available()我会期望读取的第一个事件只是阻止读取的第二个事件,但不抹去或消耗太多的stream数据。 为什么这样做会导致不能显示所有的数据?

asynchronous与非阻塞

asynchronous调用和非阻塞调用有什么区别? 还有阻塞和同步调用(请举例)?

我怎样才能中断一个ServerSocket的accept()方法?

在我的主线程中,我有一个while(listening)循环,它在我的ServerSocket对象上调用accept() ,然后启动一个新的客户端线程,并在接受新客户端时将其添加到Collection。 我也有一个pipe理线程,我想用来发出命令,如“退出”,这将导致所有的客户端线程closures,closures自己,closures主线程,通过听到错误。 然而, while(listening)循环中的accept()调用会阻塞,并且似乎没有任何方法来中断它,所以while条件不能被再次检查并且程序不能退出! 有没有更好的方法来做到这一点? 或者以某种方式来中断阻止方法?

发送一系列命令并等待响应

我必须更新连接到串行端口的设备上的固件和设置。 由于这是通过一系列命令完成的,我发送一个命令并等待,直到我收到一个答案。 在answere里面(很多行),我search一个string来表示操作是否成功完成。 Serial->write(“boot”, 1000); Serial->waitForKeyword(“boot successful”); Serial->sendFile(“image.dat”); … 所以我为这个阻塞读/写方法创build了一个新的线程。 在线程内部,我使用了waitForX()函数。 如果我调用watiForKeyword(),它将调用readLines(),直到它检测到关键字或超时 bool waitForKeyword(const QString &keyword) { QString str; // read all lines while(serial->readLines(10000)) { // check each line while((str = serial->getLine()) != "") { // found! if(str.contains(keyword)) return true; } } // timeout return false; } readLines()读取所有可用的内容并将其分隔成行,每行放在一个QStringList中,并得到一个string,我调用getLine(),它返回列表中的第一个string并删除它。 bool SerialPort::readLines(int waitTimeout) { if(!waitForReadyRead(waitTimeout)) { qDebug() […]