草庐IT

java - 非阻塞数据报套接字?

我目前正在为Android开发一个客户端应用程序,它应该通过UDP进行数据包的非阻塞接收。有什么方法可以设置DatagramSocket使其在receive()上是非阻塞的吗?基本上我要问的是如何为DatagramSocket设置MSG_DONTWAIT标志。 最佳答案 你正在寻找的是java.nio.channels.DatagramChannel和friend。 关于java-非阻塞数据报套接字?,我们在StackOverflow上找到一个类似的问题: h

java - 非阻塞文件缓存(BitmapLruCache)实现?

我正在尝试为ImageLoader创建一个简单的演示AndroidVolleyFramework的功能.构造函数如下:publicImageLoader(RequestQueuequeue,ImageCacheimageCache)问题出在ImageCache上。它的JavaDoc声明:Simplecacheadapterinterface.IfprovidedtotheImageLoader,itwillbeusedasanL1cachebeforedispatchtoVolley.Implementationsmustnotblock.ImplementationwithanLru

android - 如何在 Android 上进行非阻塞事件处理?

这个问题是关于Android上的事件处理。它不特定于c++。我需要处理UI/OS事件,在处理完所有事件后不阻塞。原因是我正在移植的应用程序非常大,不能轻易重写以在工作线程上处理它自己的东西。相反,应用程序引擎要求在冗长的操作期间处理UI/OS事件,否则会阻塞。我发现ALooper_pollAll(...)不会为我做这个。例如,如果我在我的Activity中创建一个对话框并开始一个长时间的操作,ALooper_pollAll()不会让我的对话框出现-它只会在我返回主循环时显示(我在onNativeWindowCreated中测试过)。我发现几乎可行的唯一解决方案是通过JNI调用以下代码在

Android蓝牙socket非阻塞通信教程

我正在寻找Android上的蓝牙示例代码来进行非阻塞套接字通信。我找到了几个示例,例如BluetoothChat或BluetoothSocket.java,但没有一个是非阻塞套接字通信。ps非阻塞是否自动意味着必须是异步的?我认为实际上不是-它不一样,我假设我可以在超时的情况下进行同步套接字通信。这就是我正在寻找的例子......非常感谢 最佳答案 看起来答案几乎是你做不到的然而,通过一些线程魔法,您可以让您的系统按照您想要的方式工作BluetoothSocketListenerbsl=newBluetoothSocketListe

Android RxJava,非阻塞?

我的理解是rxjava-android在单独的线程上执行操作(当提供正确的调度程序时),从而导致非阻塞操作,但是快速而肮脏的测试似乎证明这是不正确的。我使用了以下代码fragment,在这两种情况下,UI都被阻止了......fragment1Observableobservable=Observable.create(newObservable.OnSubscribe(){@Overridepublicvoidcall(Subscribersubscriber){inti=0;while(i==0){}subscriber.onCompleted();}});observable.s

c++ - C++11 中的非阻塞信号量?

此站点上的许多问题涉及C++11中引入的多线程支持中缺少信号量对象。很多人建议implementingsemaphoresusingmutexesorconditionvariablesoracombinationofboth.但是,这些方法都不允许在保证调用线程不被阻塞的同时递增和递减信号量,因为通常在读取信号量值之前必须获取锁。例如,POSIX信号量具有函数sem_post()。和sem_trywait(),两者都是非阻塞的。是否可以仅使用C++11多线程支持来实现非阻塞信号量?或者我是否必须为此使用依赖于操作系统的库?如果是这样,为什么C++11修订版不包含信号量对象?Asimi

c++ - 使用 QTextStream 以非阻塞方式读取标准输入

我尝试使用Qt以非阻塞方式读取标准输入流的内容。当套接字收到一些新数据时,我正在使用QSocketNotifier提醒我。通知程序的设置如下所示:QSocketNotifier*pNot=newQSocketNotifier(STDIN_FILENO,QSocketNotifier::Read,this);connect(pNot,SIGNAL(activated(int)),this,SLOT(onData()));pNot->setEnabled(true);onData()槽看起来像这样:voidCIPCListener::onData(){qDebug()0){str+=str

c++ - stdin/stdout/stderr 上的跨平台 (linux/Win32) 非阻塞 C++ IO

我正在尝试通过具有以下特征的标准输入/标准输出找到非阻塞IO的最佳解决方案:只要有足够的数据,以n大小的block读取。如果没有足够的数据,读入部分块。如果没有可用数据,则阻塞直到有一些(即使它可能小于n)。目标是允许高效传输大型数据集,同时立即处理“控制”代码(而不是让它们停留在某个部分填充的缓冲区中的某个地方)。我知道我可以通过使用线程和istream::get()循环,或者通过编写一堆特定于平台的代码(因为你不能在Windows中的文件句柄上选择())来实现这一点......((还有istream::readsome()看起来很有希望,但我在谷歌上找到的唯一结果是人们说它实际上效

java - 非阻塞文件读取

java有没有非阻塞的文件读取API?如果不是,用C++构建一个并通过JNI从Java应用程序调用它是否明智? 最佳答案 我原来的答案现在错了,因为添加了AsynchronousFileChannel在Java7中。你还是不能select在文件上,但现在有两种异步文件读取方法:一种采用callback和another返回Future.使用回调方法(并从回调中分派(dispatch)事件)可能比让专用线程轮询管道更简洁。 关于java-非阻塞文件读取,我们在StackOverflow上找到

c - 如何确定套接字是否已在 Windows 中处于非阻塞模式?

有没有办法查明一个套接字在Windows中是否已经处于非阻塞模式?我知道这可以在Linux的情况下完成,但是,我无法为这个Windows找到任何方法。我所有的代码都是用“C”语言编写的。有办法吗? 最佳答案 检查这一点的唯一方法是在非阻塞套接字上做一些非法的事情并检查它是否以预期的方式失败。几乎不是最稳健的设计。除非您使用WSAIoctl显式将其设置为非阻塞,否则该套接字将处于阻塞状态。或ioctlsocket与FIONBIO。我想,检查您的代码不会太难。如果您必须在运行时跟踪它,@jweyrich建议的每个套接字标志是可行的方法。