问题标签 [worker-thread]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
2357 浏览

c++ - 如何在取消工作线程中的操作时防止内存泄漏?

目前我正在开发一个包含数学分析的桌面应用程序。我正在使用 qt 作为 GUI 和用 C++ 编写的项目。当用户开始分析时,我打开一个工作线程并启动一个进度条。到目前为止一切正常,当用户取消操作时问题开始。操作很复杂,我使用了几个函数和对象,我在几个分配/释放内存次。我想了解在取消操作中恢复应该怎么做。因为可能存在内存泄漏。我应该使用哪种模式或方法来保证取消操作的稳健性和安全性?

我的想法是抛出异常,但是操作真的很复杂,所以我应该将 try-catch 放到我的所有函数中,还是有更通用的方式,模式..

编辑:问题是我的对象在作用域之间传输,所以 shared_ptr 或 auto_ptr 不能解决我的问题,Flag 想法可以,但我认为它需要这么多代码,应该有一个简单的方法。

0 投票
5 回答
6795 浏览

c# - 如何在不轮询 ThreadState 的情况下判断线程是否已完成执行?

是否有一种优雅的方法可以知道工作线程何时完成执行,以便我可以访问它产生的资源?

例如,如果工作线程使用以下方式查询 SQL Server 列表

ServersSqlDataSourceEnumerator.Instance.GetDataSources();

并将结果保存在 DataTable 变量中,我可以使用什么机制来知道该 DataTable 变量何时已填充/可用。我不想轮询 ThreadState;最好在事件完成后触发事件,这样我就可以对结果执行操作。

谢谢!

0 投票
2 回答
26244 浏览

c# - C#、事件处理程序和线程

我正在写一个小聊天应用程序,我有这个事件处理程序:

o_Typing是派生自 的类中的方法TabPage。基本上,我希望每个对话都有自己的标签。

事件处理程序由我的 Chat 对象触发,该对象在另一个线程中运行。我有 1 个用于 UI 的线程,以及用于每个聊天对话的另一个线程(以不断轮询服务器以获取新数据)

触发事件时,会MessageBox弹出,但选项卡标题不会更改。事件触发一次后,它就再也不会触发了,这让我相信该事件是在工作线程中调用的,尽管它是在 UI 线程中定义的。

如何让我的事件从工作线程中调用,并用于Invoke()让它们在 UI 线程上执行?

0 投票
3 回答
209 浏览

.net - 空工作线程,它们是什么?

在调试 .NET Framework 3.5、WinForms 应用程序时,我发现了一些没有名称的“工作线程”。

我知道当你打开一个应用程序时,默认情况下你有一个工作线程。然而,在调试过程中,当我暂停调试器并查看“线程”窗口时,我看到大约 5+ 个类似线程(优先级=正常)。

应用程序打开的所有线程都有一个名称,所以这些不是从代码中打开的,至少不是通过 Thread.Start()

当我尝试双击时,VS.NET 也找不到代码。

这些线程是什么?它们是正常的,还是某些操作会以某种方式留下空线程?

它们可以是计时器或类似的非明显控件,函数在后台与临时线程一起使用吗?

0 投票
6 回答
4621 浏览

c# - 拥有无限工作线程的正确方法?

我有一个需要大量初始化的对象(在强大的机器上需要 1-2 秒)。虽然一旦初始化完成一个典型的“工作”只需要大约 20 毫秒

为了防止它在每次应用程序想要使用它时被重新初始化(在典型的使用情况下可能是每秒 50 次或几分钟内根本没有),我决定给它一个作业队列,并让它运行在它自己的线程上,检查队列中是否有任何工作。但是,我不完全确定如何制作一个在有或没有工作的情况下无限运行的线程。

以上是我目前的内容,欢迎大家批评指正

经过思考:我在想我可能需要优雅地杀死这个线程而不是让它永远运行,所以我想我会添加一个 Job 类型来告诉线程结束。任何关于如何结束这样的线程的想法也很感激。

0 投票
2 回答
901 浏览

c++ - Boost 线程特定存储问题 (boost/thread/tss.hpp)

boost 线程库具有线程特定(本地)存储的抽象。我浏览了源代码,似乎 TSS 功能可以在任何现有线程的应用程序中使用,无论它是从 boost::thread 创建的天气如何——也就是说,这意味着某些回调已向内核注册以挂钩回调函数,当线程或进程超出范围时,该函数可能调用任何 TSS 对象的析构函数。我找到了这些回调。

我需要在各种 Web 服务器的工作线程中缓存来自 OpenSSL 的 HMAC_CTX(请参阅这个,详细的,关于我要做什么的问题),因此我不控制线程的生命周期 - 网络-服务器可以。因此,我将在不是由 boost::thread 创建的线程上使用 TSS 功能。

我只是想在开始实现缓存逻辑之前验证我的假设,我的逻辑有什么缺陷吗?

0 投票
2 回答
642 浏览

c++ - OCCI createEnvironment 阻止我的线程

我正在编写一个多线程应用程序,其中有一个主线程将任务分配给工作线程。根据任务,工作线程通过使用全局 occi 环境创建连接。当工作线程完成其任务时,它会关闭连接(我敢肯定,终止时不会引发异常)。

我的问题是,一段时间后(有时 5 分钟,有时 5 小时),线程无法从环境中获得连接,并且在那里被阻塞。

可能是什么问题?

0 投票
1 回答
717 浏览

c# - WPF 工作线程需要通过消费者通知暂停

嗨,我有一个生产者 - 消费者模式。WPF UI 是一个长期运行的工作线程的辅助工具,它正在侦听数据包和排队任务。在实践中,所有消息都出队,然后是 UI 消费者进程。

我遇到的问题是我有一个负责所有 WPF GUI 组件的 UIcontroller 类。它会打开一个新窗口,显示每个出队的任务,并保存一个线程安全的引用窗口集合。

我通过 Despatcher.BeginInvoke 发出信号。那里没有惊喜。

我遇到的问题是,如果 UIController 类成功打开 cconfigured 数量的窗口,我想暂停/从字面上停止我的工作线程。打开的窗口数量有限制。一旦打开的窗口数量减少到界限内,我就会恢复队列的处理。我尝试在此类中保存我的窗口集合,并通过调用将其传递给 UI,在该调用中它通过引用进行更新,但 Begin Invoke 是异步的,并且计数不会在工作线程的循环中及时更新。

我可以测试在 UIcontroller 类中打开的窗口的数量,忽略甚至从那里重新排队任务 - 基本上不采取任何行动。但我想要一个更清洁的解决方案。

我可以做一些干净的回调吗?

0 投票
2 回答
1615 浏览

c# - 是否无法从非 UI 线程显示 FolderBrowserDialog?

我在显示FolderBrowserDialog从非 UI 线程创建和调用的实例时遇到问题。它无法正确渲染。

更具体地说,它不显示文件夹树,而只显示Make New Folder OKCancel

替代文字

0 投票
2 回答
216 浏览

java - 如何设计非 EJB 负载均衡应用程序?

我有一个Processor正在监听 jms 主题的 java 类,它正在努力跟上消息到达的速度,所以我们决定并发:

监听主题的单个类的工作是将消息分发到工作线程池,实际上是负载均衡器。它还必须防止 2 个工作人员为同一客户处理消息。

我预计互联网上会有很多关于此的信息,但一切似乎都表明使用 EJB,应用服务器管理池并进行平衡。我确信这一定是一个非常普遍的问题,但似乎找不到任何库或设计模式来提供帮助。我是否从中获得了更多收益,是否应该深入研究并编写自己的代码?