如何中断正在等待recv函数的线程? [复制]

2023-11-27

我有一个套接字侦听器,它挂在 recv 函数上:

size_t recvLen = recv(sock, buf, 512, 0);

我想通过中断来终止该线程。 MSDN 说:

发出阻塞 Winsock 调用时 比如recv,Winsock可能需要等待 对于调用前的网络事件 可以完成。 Winsock 执行 在这种情况下需要警惕等待, 这可以被中断 异步过程调用 (APC) 安排在同一线程上。

我怎样才能做到这一点?


您可以通过将 APC 排队到它来中断它QueueUserAPC。但是,终止 APC 中的线程很可能是不安全的。对 APC 进行排队并不会结束recv,它只是中断它;一旦APC返回,它将返回等待状态recv again.

如果你想停止recv完全,你应该使用select超时等待数据可用。然后,您可以检查是否应该继续等待数据或在每次超时时继续。

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

如何中断正在等待recv函数的线程? [复制] 的相关文章

  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 请求的资源不支持 HTTP 方法“GET”

    我的路线配置正确 并且我的方法具有装饰标签 我仍然收到 请求的资源不支持 HTTP 方法 GET 消息 System Web Mvc AcceptVerbs GET POST System Web Mvc HttpGet public st
  • 除了第一列之外,Gridview 行可点击?

    我使用以下代码使 gridview 的整行可单击 protected void gridMSDS RowDataBound object sender GridViewRowEventArgs e if e Row RowType Data
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 将 Visual Studio 2012 C++ 单元测试项目链接到 exe 会导致访问冲突

    我从现有的整体 exe 本机 Visual Studio 2012 项目开始 我想添加一个本机单元测试项目 根据http msdn microsoft com en us library hh419385 aspx objectRef ht
  • 模拟 EF core dbcontext 和 dbset

    我正在使用 ASP NET Core 2 2 EF Core 和 MOQ 当我运行测试时 我收到此错误 消息 System NotSupportedException 非虚拟 可在 VB 中重写 成员上的设置无效 x gt x Movies
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • 通过 Nuke.Common/NuGet.CommandLine 部署 NuGet 包时如何通过 Azure Auth

    我正在尝试通过 Azure DevOps 上的 Nuke 和 CI CD 自动执行 NuGet 包更新 一切都构建得很好 但在 PushNuGet 步骤中 该过程尝试通过弹出窗口向 Azure 进行身份验证 这显然从未在 in devops
  • 为什么 C# 编译的正则表达式比等效的字符串方法更快?

    每次我必须对字符串执行简单的包含或替换操作 其中我正在搜索的术语是固定值 时 我发现如果我获取示例输入并对其进行一些分析 则使用编译的正则表达式是几乎 总是比使用 String 类中的等效方法更快 我尝试过比较多种方法 hs是要搜索的 干草
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • Facebook Graph API“/userid/feed”返回空白

    我正在使用 Facebook C SDK 但似乎无法使用 Graph API 获取反馈数据 我已从用户那里获得了以下扩展权限 范围 离线访问 publish stream publish checkins create event read
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • STL 向量、迭代器和插入 (C++)

    我有一个将向量的迭代器传递到的方法 在这个方法中 我想向向量中添加一些元素 但我不确定当只有迭代器时这是否可行 void GUIComponentText AddAttributes vector
  • 为 C++ 类播种 rand()

    我正在开发一个 C 类 它使用rand 在构造函数中 我真的希望这个班级在几乎所有方面都能照顾好自己 但我不知道在哪里播种rand 如果我播种rand 在构造函数中 每次构造我的对象类型的新实例时都会对其进行播种 因此 如果我按顺序创建 3
  • 为什么没有参数的函数(与实际函数定义相比)可以编译?

    我刚刚看到某人的 C 代码 我很困惑为什么要编译它 有两点我不明白 The 函数原型与实际函数定义相比没有参数 中的参数函数定义没有类型 include
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId

随机推荐

  • kubeadm:主节点从未准备好

    我正在跟进一篇博文使用 kubeadm 设置 kubernetes 集群 因此 我使用桥接网络创建了一个 Virtualbox 然后只需按照说明进行操作即可 我最初只是做了kubeadm init它不起作用 master NotReady
  • Python/Tkinter:动态扩展字体大小以填充框架

    我知道您可以通过以下命令让框架小部件扩展并填充其容器中可用的所有区域 frameName pack fill both expand True 对于文本的字体大小有何作用 目前我的文本是标签小部件的属性 标签小部件的父级是frameName
  • 为什么 GCC 允许在 C++ 中使用 round(),即使带有 ansi 和 pedantic 标志?

    即使使用 ansi and pedantic flags include
  • 未设置设计密钥

    我正在开发一个 Rails 4 应用程序 使用 Active Admin gem 作为管理后端 Active Admin 反过来使用 Devise 进行用户身份验证 现在 当我尝试使用部署应用程序时capistrano在 VPS 服务器上
  • Yii 将过滤器添加到 CGridView 中的虚拟属性并使其可排序

    我有以下型号 User包含列 id user name password user type Admin包含列 id user id full name etc Editor包含 id user id full name etc 列 关系是
  • 浮动 div 而不定义 height 属性

    它看起来很简单 也许是 只是被卡住了 gt 只是为了好玩 现在没有实际需要 我懂了 div class master div class left p LEFT p div div class right p Lorem ipsum dol
  • 将列表转换为字典[重复]

    这个问题在这里已经有答案了 l a b c d e 我想将此列表转换为字典 例如 d a b c d e 所以基本上 偶数将是键 而赔率将是值 我知道我可以用 非Pythonic 的方式来做到这一点 例如带有if语句的for循环 但我相信应
  • IExtensionConfigProvider 未初始化或与 Microsoft.Azure.WebJobs v3 绑定

    我们通过与 IExtensionConfigProvider 的参数绑定在 Azure 函数 netstandard20 上的 v2 中使用依赖项注入 将 Microsoft NET Sdk Functions 从 1 0 13 升级到 1
  • tkinter:键盘中断需要一段时间

    在 Linux 上使用 Tkinter 和 Python 我试图通过使用KeyboardInterrupt例外 但是当我按下它时 有一段时间没有任何反应 最终它 接受 并退出 示例程序 import sys from Tkinter imp
  • R中的负下标错误

    我有以下代码片段 if k lt 100 k gt 0 j k seq 50 150 lt F else j k seq 100 100 lt F 并出现以下错误 j k seq 50 150 即使我已经设置了条件 如果下标可能 为什么我会
  • Cakephp Sqlserver 编码

    这让我难住了 我正在尝试为我的 Sqlserver 连接设置编码 但我尝试的所有操作都失败了 我只得到 错误 使用 Sqlserver 的数据库连接丢失或无法连接 连接 数据库服务器返回此错误 SQLSTATE IMSSP 指定的编码无效
  • 使用 PHP 操作 MySQL 中的 utf8mb4 数据

    这大概是一件很简单的事情 我发誓我一直在网上寻找答案 但还没有找到 由于我的具体情况有点不典型 我最终决定在这里提问 我在 MySQL 中有一些表用于中文程序 它需要能够支持所有可能的汉字 包括没有很好字体支持的罕见汉字 表中的示例单元格可
  • 原始 C++ 指针是第一类对象吗?

    根据维基百科 当一个对象满足以下条件时 它就是一流的 可以存储在变量和数据结构中 可以作为参数传递给子例程 可以作为子例程的结果返回 可以在运行时构造 具有内在身份 独立于任何给定名称 有人曾经告诉我 原始指针不是第一类对象 而像 std
  • 如何在 C# 中获取运行 Windows 8 的计算机的唯一标识符?

    我正在开发一个用 C 编写的 Metro 应用程序 需要一种唯一标识设备的方法 我在文档中找到了 ASHWID 它看起来很棒 建议的代码如下 HardwareToken token HardwareIdentification GetPac
  • 将 @font-face 与 ABCPDF 一起使用?或者有其他方法将字体转换为 PDF 吗?

    我们有一个大型应用程序成功使用 ABCPDF NET 和 HTML 样式文本 我们习惯于使用 Windows 中未安装但存储在文件系统其他位置的文件中的字体添加文本 我们这样做是为了每个用户都可以上传自己的字体并将其与输出一起使用 我们使用
  • 即使设置了权限且外部存储处于 MEDIA_MOUNTED 状态,也无法写入 SD 卡

    在尝试将文件写入 SD 卡时 我得到java io FileNotFoundException filename Read only file system 例外 遗憾的是 这里发布的许多解决方案都没有帮助我 我已设置权限 外部存储处于 M
  • 如何以编程方式与应用程序交互

    我可能很快就会从事一些项目 在这些项目中 我需要从文件中获取数据并以编程方式将该数据输入到另一个第三方 不是我自己的 应用程序中 一个问题 我不知道如何做到这一点 我需要输入数据 例如时间表上的时间 任何人都可以引导我朝正确的方向发展以获取
  • 如何制作完美的方形图像/按钮

    我正在为 Android 设计一个基本的数独游戏 我想要一个 4x4 的表格 其中所有单元格都是正方形 我正在尝试使用 16 个按钮TableLayout 我的方式看起来像这样 它们的形状是矩形 my xml
  • 如果文件权限大于755,如何在Perl中检查?

    对于unix文件 我想知道Group或World是否对该文件有写权限 我一直在思考这些问题 my fpath orion properties my info stat fpath my retMode info gt mode retMo
  • 如何中断正在等待recv函数的线程? [复制]

    这个问题在这里已经有答案了 我有一个套接字侦听器 它挂在 recv 函数上 size t recvLen recv sock buf 512 0 我想通过中断来终止该线程 MSDN 说 发出阻塞 Winsock 调用时 比如recv Win