草庐IT

非阻塞

全部标签

c++ - 关闭阻塞 UDP 套接字的正确方法

我有一个C++对象,它创建一个线程来从阻塞的UDP套接字中读取数据:mRunning.store(true);while(mRunning.load(boost::memory_order_consume)){...intsize=recvfrom(mSocket,buf,kTextBufSize,0,(structsockaddr*)&packet->mReplyAddr.mSockAddr,(socklen_t*)&packet->mReplyAddr.mSockAddrLen);if(size>0){//dostuff}}return0;(mRunning是一个boost::at

c++ - 如何在不阻塞主线程的情况下使用 Qt-Dbus 绑定(bind)

我的目标是使用Qt'sDBusbindings创建一个库.我试图创建一个Qt应用程序,但没有在主线程中启动QEventLoop(由QCoreApplication类提供)。这是一个简约的应用程序示例,使用QT-4.6.2版本可以正常工作,但使用QT-4.8或更高版本会阻止内省(introspection)。DBusHandler.hpp#pragmaonce#include#include#include#includeclassDBusHandler:publicQThread{Q_OBJECT;private:voidrun(void){QDBusConnectionconnect

c++ - boost::lockfree::spsc_queue 忙等待策略。有阻塞流行音乐吗?

所以我正在使用boost::lockfree::spec_queue通过两个运行我应用程序中两个对象的仿函数的boost_threads进行通信。除了spec_queue::pop()方法是非阻塞的之外,一切都很好。即使队列中没有任何内容,它也会返回True或False。但是我的队列似乎总是返回True(问题#1)。我认为这是因为我预先分配了队列。typedefboost::lockfree::spsc_queue>spsc_queue;这意味着要有效地使用队列,我必须忙于等待使用100%cpu不断弹出队列。我宁愿不睡任意长的时间。我在java中使用了其他队列,这些队列会阻塞直到对象可

C++ 程序意外阻塞/抛出

我正在学习C++中的互斥锁,但以下代码(摘自N.Josuttis的“C++标准库”)有问题。我不明白为什么它会阻塞/抛出除非我在主线程中添加this_thread::sleep_for(然后它不会阻塞并且所有三个调用都是执行)。编译器是从命令行使用的cl.exe。#include#include#include#include#include#includestd::mutexprintMutex;voidprint(conststd::string&s){std::lock_guardlg(printMutex);for(charc:s){std::cout.put(c);}std:

c++ - std::list<std::future> 析构函数不阻塞

我有一个多线程应用程序,有一个循环等待用户输入作为主线程。在正确的输入上,它应该停止循环并等待所有其他线程正确结束。为此,我创建了一个std::list,其中放置了为创建线程而创建的std::future对象std::list>threads;threads.emplace_front(std::async(std::launch::async,...));我的印象是,让list超出范围应该阻塞,直到所有线程返回它们的main函数,因为list的析构函数将destrurct所有std::future元素和thedestructorofthose将等待线程完成。编辑:因为它是相关的,所以

c++ - EnterCriticalSection 似乎没有阻塞

我有以下代码来创建线程来完成一些工作(为清楚起见,省略了部分)。CRITICAL_SECTIONgCS;classLocker{public:Locker(CRITICAL_SECTION&cs):m_cs(cs){EnterCriticalSection(&m_cs);}~Locker(){LeaveCriticalSection(&m_cs);}private:CRITICAL_SECTIONm_cs;};...HRESULTMyClass::FinalConstruct(){InitializeCriticalSection(&gCS);}...DWORDWINAPIMyClas

windows - 对于在 Windows 上运行的未阻塞线程等待执行,16 毫秒是否异常长?

最近,我使用DSPACK组件对我在Delphi6中的DirectShow应用程序进行了一些深入的时序检查。作为诊断的一部分,我创建了一个临界区类,它向大多数Windows编程语言中常见的临界区对象添加了超时功能。如果第一个Acquire()和最后一个匹配Release()之间的持续时间超过X毫秒,则会抛出异常。最初我将超时设置为10毫秒。我在关键部分中包装的代码非常快,主要使用内存移动和填充来处理protected区域中包含的大部分操作。令我惊讶的是,我在看似随机的代码部分中经常出现超时。有时它发生在迭代缓冲区列表并按顺序执行某些快速操作的代码块中,其他时候发生在protected代码

python - 期望控制台输入而不会阻塞的 Spawn 子进程?

我正在尝试通过调用cvs.exe进程从Python进行CVS登录。手动调用cvs.exe时,它​​会向控制台打印一条消息,然后等待用户输入密码。当使用subprocess.Popen调用它时,我注意到调用会阻塞。代码是subprocess.Popen(cvscmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)我假设它阻塞是因为它正在等待输入,但我的期望是调用Popen会立即返回,然后我可以调用subprocess.communicate()来输入实际密码。我怎样才能实现这种

windows - 在 stdin 在 Windows 上阻塞时退出应用程序

我有一个应用程序,它在线程中使用getline()从标准输入读取数据。我想从主线程关闭应用程序,而getline仍然阻塞另一个线程。如何实现?我不想强制用户必须按ctrl-Z来关闭标准输入和应用程序。到目前为止,我已经尝试在Windows8.164位v120平台工具集上使用我的编译器设置(RuntimeLibrary=/MT):freopenstdin,但它被内部锁阻止销毁调用abort()的线程将Eof、行尾返回到std::cin,这也被阻塞了*更新*detach()不起作用,exit()被锁阻塞winapiTerminatThread()调用abort()winapiCloseHa

c - 使用 minifilter 驱动程序的 USB 阻塞(passThrough)

我正在为USB(闪存驱动器)编写用于阻止的微型过滤器代码,即(拒绝访问)。所以,有人可以帮助我,如何检测或阻止USB或在passThroughWDK示例代码中使用什么方法USB检测和USB阻止?我正在尝试在PFLT_INSTANCE_SETUP_CALLBACK*中使用*IOCTL_STORAGE_QUERY_PROPERTY。我在正确的道路上吗?如果是,那么如何在PFLT_INSTANCE_SETUP_CALLBACK中使用IOCTL_STORAGE_QUERY_PROPERTY??? 最佳答案 经过3个月的努力,我终于实现了阻塞