有工作要做时挂起并通知线程

2024-02-21

我有多个线程(在 IIS 上运行的 C# 应用程序)正在运行,所有线程都需要与同一个 MQ 后端进行通信。为了最大限度地减少网络流量,我只需要在有工作要做时发送后端请求。将有一个线程来监视是否有工作要做,并且它需要通知其他线程它们也应该开始处理。当前的解决方案涉及监视器线程设置全局变量并让其他线程循环并检查该变量,即在监视器线程中:

CheckIfWorkAvailable() {
  while(true) {
    if (queue.Empty != true) {
      workToBeDone = true;
    }
  }//end while loop
}

然后在工作线程中:

DoWork() {
  while(true) {
    if (workToBeDone == true) {
      //do work...
    }
    else {
      Thread.Sleep(x seconds)
    }
  }//end while loop
}

当有工作要做时,监视器线程是否可以通知工作线程,而不是让它们只是循环和睡眠?工作线程还设置一个计数器来指示它们正在工作,并在工作完成时递减该计数器,以便可以将 workToBeDone 标志设置为 false。


查看等待句柄 http://msdn.microsoft.com/en-us/library/system.threading.waithandle.aspx及其下降的阶级。事件等待句柄 http://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle.aspx可能适合您的需求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有工作要做时挂起并通知线程 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • VueJS 与 HAML/Jade/Pug 类似的模板

    我同时使用 Vue js 和HAML https www npmjs com package haml在我当前的项目中 模板由 HAML 解析 转换为 HTML 然后由 Vue 解析 例如 pagecontent nonscrolling
  • Spring JPA 选择特定列

    我正在使用 Spring JPA 执行所有数据库操作 但是我不知道如何从 Spring JPA 中的表中选择特定列 例如 SELECT projectId projectName FROM projects 您可以使用 Spring Dat
  • 使用nodemailer在node.js中发送邮件

    我正在尝试使用 Nodemailer 在 node js 中发送邮件 但它显示一些错误 例如 Error self signed certificate in certificate chain code ECONNECTION comma
  • 将 css 边框设置为 90 度而不是 45 度角

    我有一个 div 其 border bottom 和 border right 属性具有不同的颜色 因此 它们通过一条线分开 使盒子呈 45 度角 如何使底部边框更短 以便右边框一直延伸到元素的底部 从而产生 90 度角分隔线 你可以这样做
  • 是否可以将 vb.net 源代码转换为 C++ 代码?

    是否有任何工具将 vb net 源代码转换为 C 例如 gnu C 我知道 Mono 可以将项目转移到不同的平台 但我宁愿转换源代码 既然我们都知道 net 使用自己的二进制库 其他编译器无法使用 是否有任何工具至少可以将 vb net 转
  • 如何在 wiki api 中获取图像 URL?

    当我调用 wiki API 来访问图像 URL 时 我得到这样的图像 URL File Ad tech London 2010 2 JPG 如何从 wiki API 获取该文件的正确 URL 除此之外 关于图像 缩略图 URL 的文档很少T
  • 如何定义 Apache Airflow DAG 的超时?

    我使用的是 Airflow 1 10 2 但 Airflow 似乎忽略了我为 DAG 设置的超时 我正在使用以下命令为 DAG 设置超时期限dagrun timeout参数 例如 20 秒 我有一个需要 2 分钟才能运行的任务 但 Airf
  • 在php中与google的搜索api通信时启动参数的最大值是多少?

    这是我的代码 function doGoogleSearch searchTerm start endpoint web key url http ajax googleapis com ajax services search endpo
  • 使用 Java SE 功能的 BlackBerry 问题

    我已将 net rim api jar 导入到我的项目中 我还想使用标准 rt jar 中的 StringTokenizer 和 PrintWriter 等非 j2me 类 但是当我运行该应用程序时 它给出了错误 java io UTFDa
  • 将excel的特定列读取到java程序中

    我需要读取 Excel 工作表的特定列 然后在 java 中声明变量 我所做的程序读取Excel工作表的全部内容 但我需要读像C这样的固定专栏 这就是我所做的 import java io File import java io IOExc
  • 有没有办法让字典键成为范围?

    如果这很明显 请原谅我 但我对 Python 非常非常陌生 我已经找到了从字典中获取多个键的方法 但这不是我想要做的 基本上我正在寻找这样的东西 my dict 1 10 foo 11 20 bar 91 100 baz 但其中的键实际上不
  • 需要一段JS代码来多次使用不同的值和函数名称。如何高效地做到这一点?

    我有一个像这样的脚本 div div 我还想要 8 块 不同的foo bar and string The otherConfigs 不变 我可以简单地复制
  • SwiftUI 中的多行可编辑文本字段

    我正在寻找在 macOS 的 Swift UI 中创建一个可编辑的多行文本框 我想创建一个语法突出显示文本编辑器 因此它是多行的 并可以更改各行的样式 在当前状态下 这可能吗 我在网上几乎找不到任何有关它的文档 它可能很有用 这是我使用 S
  • SugarCRM - 数据库故障 - 行大小太大?

    我一直在为 SugarCRM 构建一个自定义模块 但遇到了一些问题 在安装该模块时 我遇到了 数据库故障 请参阅 Sugarcrm log 了解详细信息 检查日志文件后 我发现错误是这样的 MySQL 错误 1118 行大小太大 所用表类型
  • 使用Javascript连接SQL Server数据库

    我需要使用 Javascript 从 SQl Server 2008 数据库读取一些数据 所以我写了这个 html页面代码
  • Android SDK Mediaplayer.create随机返回null

    我遇到一个问题 即使音频文件确实存在 MediaPlayer create 方法偶尔也会返回 null 事实上 如果我将 create 调用放入 while 循环中 媒体播放器最终将创建成功 这似乎只发生在我的手机 运行 2 1 的 HTC
  • 在命令行上检查音频文件的持续时间

    我需要检查一组音频文件的持续时间 有没有一种简单的方法可以在 unix 命令行上执行此操作 gt duration 我有一个令人惊叹的 SoX 应用程序 它有一个名为 统计 的选项 可以生成一组包括持续时间的音频信息 我正在寻找一种只获得持
  • 记住在单选 AlertDialog 中选择的内容

    我有一个AlertDialog它将数组显示为单个选定的选项 protected boolean blFrom blTo protected void showSelectToDialog boolean checkedDate new bo
  • 如何使用按行分列来获取频率计数?

    我有一个数据框 用于跟踪个人 x Bob 在感兴趣的时间范围 1900 1999 年 内的服务参与情况 srvc inv 1 0 library tidyverse dat lt data frame name rep Bob 100 da
  • 有工作要做时挂起并通知线程

    我有多个线程 在 IIS 上运行的 C 应用程序 正在运行 所有线程都需要与同一个 MQ 后端进行通信 为了最大限度地减少网络流量 我只需要在有工作要做时发送后端请求 将有一个线程来监视是否有工作要做 并且它需要通知其他线程它们也应该开始处