草庐IT

线程队列

全部标签

c# - 向线程发送消息的最佳方式

将消息发送到在c#/.net中while(1)循环中运行的线程(而不是进程)的最有效和最快的方法是什么:使用同步队列(如BlockingQueues&Thread’sCommunicationinC#)运行消息循环在线程上下文中使用系统winforms的Application.Run并在运行application.run之前订阅一个事件,该事件在线程上下文中捕获消息。使用套接字或命名管道向线程发送消息。在Linux中,我习惯于使用unix域套接字执行此操作,在Windows中执行此操作的等效方法是什么?共享内存文件?命名管道?你怎么看? 最佳答案

c# - 调试多线程应用程序

我继承了一个在开始时抛出100个线程的应用程序。这使我的调试生活变得异常棘手。有没有办法让VisualStudio跟随一个线程? 最佳答案 您是否尝试过在VisualStudio中使用“线程”窗口(在“调试”/“Windows”菜单中)?您可以卡住线程并在它们之间切换 关于c#-调试多线程应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4364738/

c# - 如何(以及是否)使用 TPL 编写单一消费者队列?

我最近听到了很多关于.NET4.0中的TPL的播客。它们中的大多数描述了后台事件,例如下载图像或进行计算,使用任务以使工作不会干扰GUI线程。我处理的大部分代码更多地具有多生产者/单一消费者的风格,其中来自多个来源的工作项必须排队,然后按顺序处理。一个例子是日志记录,其中来自多个线程的日志行被顺序排列到一个队列中,以便最终写入文件或数据库。来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录在最终输出中应该彼此“接近”。所以多个线程或任务或任何东西都在调用队列:lock(_queue)//orusealock-freequeue!{_queue.enqueue(some_wo

c# - 理解调度队列

我想我需要一些帮助来理解DispatcherQueue。当新工作到达时,它会被添加到调度程序队列的开头,而当Dispatcher想要处理工作项时,它会从开头被删除。更一般地说:如果有工作,它将以FIFO方式存储在队列中,并在没有剩余工作时进行处理。MSDN文档here是指loop和frame:Dispatcher在循环中处理工作项队列。循环称为帧。但是在这种情况下循环在哪里?对我来说,循环是指迭代某些东西,当它到达终点时,它会重新开始。frame的概念是什么?根据MSDN文档,一个框架是队列中工作项目的一部分?如果是这样,应该如何使用静态方法Disptatcher.PushFrame(

c# - 如何有效地终止 C# 中的线程?

我不是trying至beat一个deadhorse,honestly.我已经阅读了所有关于线程终止的建议,但是,请考虑代码。它执行以下操作:它启动一个线程(通过StartThread方法)它调用数据库在ServiceBroker队列中查找任何内容。请注意WAITFOR命令-这意味着它会一直坐在那里直到队列中有内容。所有这些都在MonitorQueue方法中。终止线程。我尝试了.Interrupt-它似乎什么也没做。然后我尝试了.Abort,它永远不应该被使用,但即使这样也没有任何作用。ThreadthxMonitor=newThread(MonitorQueue);voidStartT

c# - 多线程.NET队列问题

我的代码中有一个奇怪的错误。这种情况极为罕见(可能每隔几周发生一次),但它确实存在,我不确定为什么。我们有2个线程在运行,1个线程获取网络消息并将它们添加到队列中,如下所示:DataMessages.Enqueue(newDataMessage(client,msg));另一个线程从这个队列中取出消息并处理它们,就像这样:while(NetworkingClient.DataMessages.Count>0){DataMessagemessage=NetworkingClient.DataMessages.Dequeue();switch(message.messageType){..

解决Python Socket UDP端口侦听线程内更新UI界面卡顿、奔溃的问题

 网络读卡器介绍:WIFI无线网络RFID云读卡器远程网络开关物流网NB-IoT4G刷卡阅读器-淘宝网(taobao.com)  Python使用PyQt5做UI界面,开启线程侦听UDP端口,端口接收到网络读卡器的读卡数据后刷新UI界面显示接收数据,解析数据包信息并向读卡器发送显示文字、驱动读卡器播报语音、蜂鸣响声提示、开启继电器开关等操作。  在接收数据的子线程内如果直接更改UI窗口控件来显示信息,会产生显示信息刷新不及时、造成显示卡顿、卡死或软件直接奔溃等问题,产生原因是PyQt5中,数据接收处理子线程内是不能刷新UI显示线程的,必段使用创建信号,触发时将显示信号传送给槽函数来刷新UI的方

c# - 当原始类超出范围时线程会发生什么

为了清楚起见,我简化了下面的示例,但我在现场制作程序中遇到过这个,但我看不出它是如何工作的!publicclassTest{staticvoidMain(){Counterfoo=newCounter();ThreadStartjob=newThreadStart(foo.Count);Threadthread=newThread(job);thread.Start();Console.WriteLine("Mainterminated");}}publicclassCounter{publicvoidCount(){for(inti=0;i主例程启动计数器线程,主例程终止。无论是否提

c# - 如何从多线程访问 GUI (GTK)?

我有一个从GUI生成的工作线程(用于GUI性能),我如何访问GUI,例如从线程本身生成新窗口/小部件?我尝试使用委托(delegate),但它似乎不起作用。有任何想法吗?可能的例子?谢谢。 最佳答案 根据他们的BestPractices:Gtk#isnotathread-safetoolkit,whichmeansthatonlyonethreadatatimecansafelyinvokemethodsonGtk#.Thisthreadistypicallythethreadexecutingthemainloop(whichis

c# - 哪些方法可以让线程等待一个事件然后继续执行?

我有一个正在运行的线程,它委派了一些任务。当单个任务完成时,将引发一个事件,说明它已完成。这些任务需要按照特定的顺序运行,并且需要等待上一个任务完成。我怎样才能让线程等到它收到“任务完成”事件?(除了设置标志然后while循环轮询标志的明显事件处理程序之外) 最佳答案 我经常使用AutoResetEvent当我需要等待异步任务完成时等待句柄:publicvoidPerformAsyncTasks(){SomeClasssomeObj=newSomeClass()AutoResetEventwaitHandle=newAutoRese