草庐IT

阻塞性

全部标签

c++ - Qt应用程序阻塞系统关机

我有一个Qt4.6.2应用程序,在WindowsXPSP2x64系统上运行。当我按下系统上的物理电源/关机按钮时,当我的应用程序运行时什么也不会发生,应用程序不会关闭,系统也不会关机。如果我转到开始菜单并单击关闭,那么我的应用程序将关闭但系统不会关闭。关闭我的应用后,系统会以两种方式正常关闭。有什么想法可以让我的应用程序正常运行并允许系统正确关闭吗?谢谢,扎克 最佳答案 阅读有关QSessionManager和QApplication::commitData的内容——它更符合Qt的方式

c# - 检查 StreamReader 是否有可用数据的非阻塞方式

我有一个StreamReader,我想知道是否有可用数据而不阻塞线程。我尝试了Peek方法,但是当没有可用数据时它会阻塞。using(StreamReaderreader=newStreamReader(stream)){if(reader.Peek()==-1)//Blocksherewhilethereisnodataandunblocksassoonasthereisdata.{}}如果我检查themonocodeofthePeek()method,它在评论中说////Peekcanblock://http://connect.microsoft.com/VisualStudio

c# - 为什么 Console.In.ReadLineAsync 会阻塞?

使用以下代码启动一个新的控制台应用程序-classProgram{staticvoidMain(string[]args){while(true){TaskreadLineTask=Console.In.ReadLineAsync();Debug.WriteLine("hi");}}}Console.In.ReadLineAsync处于阻塞状态,直到在控制台中输入一行后才会返回。因此“Hi”永远不会写入控制台。在Console.In.ReadLineAsync上使用await也会阻塞。据我了解,新的AsyncCTP方法不会阻塞。这是什么原因?还有一个例子staticvoidMain(s

c# - 为什么 IObservable<T>.First() 会阻塞?

我最近一直在努力了解.NET的响应式扩展,但在概念上遇到了一点障碍:我无法弄清楚为什么IObservable.First()会阻塞。我有一些示例代码看起来有点像这样:vara=newListItem(a);varb=newListItem(b);varc=newListItem(c);vard=newListItem(d);varobservableList=newList{a,b,c,d}.ToObservable();varitemA=observableList.First();//NeverreachedAssert.AreEqual(expectedFoo,itemA.Foo

c# - 异步(非阻塞)代码的可伸缩性优势是什么?

阻塞线程被认为是一种不好的做法,主要原因有两个:线程消耗内存。线程通过上下文切换消耗处理时间。以下是我因这些原因而遇到的困难:非阻塞的异步代码也应该消耗几乎相同数量的内存,因为调用堆栈应该保存在执行异步调用之前的某处(上下文被保存,之后全部)。如果线程效率非常低(在内存方面),为什么OS/CLR不提供更轻量级的线程版本(仅保存调用堆栈的上下文而不保存其他内容)?这不是解决内存问题的更简洁的解决方案,而不是迫使我们以异步方式重新构建我们的程序(这要复杂得多,更难理解和维护)吗?当线程被阻塞时,操作系统会将其置于等待状态。操作系统不会上下文切换到sleep线程。由于线程生命周期的95%以上

c# - ASP.NET 工作线程的大部分事件时间是否都处于阻塞状态?

我正在尝试确定ASP.NET工作线程的角色。我的IIS7安装默认允许最多25个工作线程,否则我会将其设置为1。当用户请求.aspx页面时,我知道该请求将检索工作线程。但是加载该页面上的每个图像是否也占用了一个工作线程?一旦检索到图像,检索它的工作线程是否也负责将其传输给用户(通过blocking-tcp-sockets?)? 最佳答案 让我们来看看对ASPX页面的Web请求对用户及其浏览器的看法。用户将浏览器导航到ASPX页面。在服务器上,IIS将此识别为ASP.NET请求并将其路由到.NET处理程序进行处理,其中包括采用工作线程、

c# - CPU 未充分利用。由于阻塞 I/O?

我正在尝试找出未充分利用CPU的C#服务器应用程序的瓶颈所在。我认为这可能是由于磁盘I/O性能不佳造成的,与应用程序本身无关,但我无法从这个假设中得出事实。应用程序从本地MSMQ队列读取消息,对每条消息进行一些处理,并在处理完消息后,将响应消息发送到另一个本地MSMQ队列。我正在使用异步循环从队列中读取消息,尽可能快地将它们从队列中取出并使用Task.Run调度它们进行处理以启动每个消息的处理(并且不要在此Task.Run上等待..只是附加一个延续只会在它上面出错以记录错误)。每条消息都是并发处理的,即无需等待消息完全处理后再处理下一条消息。在消息处理结束时,我正在使用MessageQ

c# - C#5.0 中的非阻塞 sleep (类似于 JavaScript 中的 setTimeout)

在新的“异步”样式中,JavaScript的setTimeout(callback,milliseconds)与C#的模拟是什么?例如,如何将以下延续传递风格的JavaScript重写为支持异步的现代C#?JavaScript:functionReturnItAsync(message,callback){setTimeout(function(){callback(message);},1000);}C#-5.0:publicstaticasyncTaskReturnItAsync(stringit){//returnawait...?} 最佳答案

c# - 限制异步方法的并行度而不阻塞线程池线程

我有一个异步方法RequestInternalAsync()它向外部资源发出请求,并希望编写一个包装方法,通过减少并行性来限制对该方法的并发异步请求的数量。想到的第一个选项是TaskScheduler并发性有限(LimitedConcurrencyLevelTaskScheduler、ConcurrentExclusiveSchedulerPair等)。但要使用自定义调度程序运行任务,我必须使用TaskFactory启动任务只接受Action,即我不能通过不阻塞额外的线程来等待内部方法的执行来做到这一点。第二个选项是SemaphoreSlim,它完成了它的工作,但在这种情况下,我正在实

c# - 将方法放入任务中以避免阻塞 asp.net 线程

我想知道以下代码是否有任何我在网络服务器上运行时不知道的陷阱。通读精品系列http://reedcopsey.com/series/parallelism-in-net4/我找不到与我的问题具体相关的任何内容,与msdn一样,所以我想我会把它带到这里。调用示例:publicActionResultIndex(){ViewBag.Message="WelcometoASP.NETMVC!";Task.Factory.StartNew(()=>{//ThisissomelongcompletingtaskthatIdon'tcareabout//Sayloggingtothedatabas