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

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(使用前将#替换为@)

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

  • 如何使用C从http下载文件?

    最近几天我试图弄清楚如何从 URL 下载文件 这是我对套接字的第一个挑战 我用它来了解协议 所以我想在没有 cURL 库的情况下只用 C 语言来完成它 我搜索了很多 现在我可以打印页面的源代码 但我认为这与文件不同 我不必只将接收到的数据从
  • SOAP Web 服务:多台服务器,一个接口

    我有一个场景 需要任意数量的服务器来提供相同的 SOAP Web 服务 我想生成一组代理类 并能够为它们提供一个位置 以便在运行时将它们指向不同的服务器 不幸的是 看起来好像wsdl port节点 子节点wsdl service 要求对特定
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 在 C# 中解析 JS Date.toIsoString

    我需要将 JS 日期存储为 ISO 8601 日期 我目前正在从格式为 2019 06 22T00 00 00 000Z 的表单中获取日期 正如 JS 的 toIsoString 方法所期望的那样 当这个日期传递到我的 API 控制器时 我
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

    我有这段代码 static void err doit int errnoflag int level const char fmt va list ap int errno save unsigned long n char buf MA
  • 在一个解决方案中调用不同项目的方法

    1 个解决方案中有 3 个项目 我对第一个项目中的主文件进行的主要操作 但是我需要调用第三个项目中的方法并使用类 例如 第三个项目有 public DataClasses1DataContext base global WindowsFor
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • C++ 中的析构函数

    我的 AB h 文件中有一个构造函数 class AB private int i public AB i 0 constructor AB i 0 destructor virtual void methodA unsigned int
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • 稀疏矩阵超定线性方程组c/c++库

    我需要一个库来解决 Ax b 系统 其中 A 是一个非对称稀疏矩阵 每行有 8 个条目 而且可能很大 我认为实现双共轭梯度的库应该没问题 但我找不到一个有效的库 我尝试过 iml 但 iml sparselib 包中缺少一些标头 有小费吗
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • 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 后端进行通信 为了最大限度地减少网络流量 我只需要在有工作要做时发送后端请求 将有一个线程来监视是否有工作要做 并且它需要通知其他线程它们也应该开始处