windows C++并行编程技术
文章平均质量分 75
windows Visual C++ 提供了以下技术,可创建多线程和并行程序,利用多核优势,使用 GPU 进行常规用途编程。
sului
windows驱动工程师,从事windows 底层开发10年,开发过Serial、1394、stream、Image、Network、USB、GNSS、MBBCx、BlueTooch、Wifi、NCM等几乎所有类别的驱动程序开发项目。
展开
-
windows C++-UWP 应用中使用 HttpRequest 类
如果你的应用程序不需要取消支持,请将 concurrency::cancellation_token::none 传递给 HttpRequest::GetAsync 和 HttpRequest::PostAsync 方法。6. 在 MainPage.xaml.cpp 中,实现 GetButton_Click 类的 PostButton_Click、CancelButton_Click 和 MainPage 方法。7. 在 MainPage.xaml.cpp 中,实现。原创 2024-10-02 02:07:31 · 238 阅读 · 0 评论 -
windows C++-使用任务和 XML HTTP 请求进行连接(一)
当您使用 IXMLHTTPRequest2 接口通过 HTTP 创建 Web 请求时,可以实现 IXMLHTTPRequest2Callback 接口来接收服务器响应并对其他事件做出响应。此示例定义了 HttpRequest 类来创建 Web 请求,并定义了 HttpRequestBuffersCallback 和 HttpRequestStringCallback 类来处理响应。原创 2024-10-02 02:07:13 · 576 阅读 · 0 评论 -
windows C++-内存管理函数
该文档介绍并发运行时提供的内存管理函数,可帮助你以并发方式分配和释放内存。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。由于任务计划程序有助于优化应用程序的性能,如果你刚开始接触并发运行时,建议从使用并行模式库 (PPL) 或异步代理库开始。并发运行时提供两个内存管理函数,这些函数已经过优化,能以并发方式分配和释放内存块。concurrency::Alloc 函数通过使用指定的大小来分配内存块。concurrency::Free 函数释放由 Alloc 分配的内存。原创 2024-10-01 04:36:46 · 797 阅读 · 0 评论 -
windows C++-使用上下文类实现协作信号量
下面演示如何使用 concurrency::Context 类实现协作信号灯类。Context 类允许你阻止或暂停当前执行上下文。在当前上下文因资源不可用而无法继续时,阻止或暂停当前上下文很有用。信号灯是当前执行上下文必须等待资源变为可用的一种情况示例。信号灯(例如关键节对象)是一个同步对象,支持一个上下文中的代码具有对资源的独占访问权限。但是,与关键节对象不同,信号灯支持多个上下文同时访问资源。如果具有信号灯锁的上下文数量达到上限,则每个附加的上下文必须等待另一个上下文释放信号灯锁。原创 2024-09-30 00:15:00 · 862 阅读 · 0 评论 -
windows C++-使用过度订阅偏移延迟
超额订阅可以提高某些包含高延迟任务的应用程序的整体效率。本文说明如何使用超额订阅来抵消从网络连接读取数据所导致的延迟。原创 2024-09-30 00:15:00 · 376 阅读 · 0 评论 -
windows C++~上下文
本文档介绍并发运行时中上下文的角色。附加到计划程序的线程称为执行上下文(或只是上下文)。concurrency::wait 函数和 concurrency::Context 类允许你控制上下文的行为。使用 wait 函数在指定时间内暂停当前上下文。当你需要更好地控制上下文何时阻止、取消阻止和暂停时,或者更好地控制你希望何时过度订阅当前上下文时,请使用 Context 类。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。原创 2024-09-30 00:15:00 · 430 阅读 · 0 评论 -
windows C++-轻量级任务
本文档介绍并发运行时中轻量级任务的角色。轻量级任务是直接从 concurrency::Scheduler 或 concurrency::ScheduleGroup 对象计划的任务。轻量级任务类似于提供给 Windows API CreateThread 函数的功能。因此,当改编现有代码以使用并发运行时的计划功能时,轻量级任务非常有用。并发运行时本身使用轻量级任务来计划异步代理并在异步消息块之间发送消息。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。原创 2024-09-30 00:15:00 · 327 阅读 · 0 评论 -
windows C++-计划组
本文档介绍并发运行时中计划组的角色。计划组将相关任务关联在一起或进行分组。每个计划程序都有一个或多个计划组。当你需要在任务之间处于较高位置时(例如,当一组相关的任务受益于在相同的处理器节点上执行操作时),可使用计划组。相反,当应用程序具有特定质量要求时,例如,当希望限制分配给一组任务的处理资源量时,请使用计划程序实例。有关计划程序实例的详细信息,请参阅计划程序实例。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。原创 2024-09-28 17:25:11 · 853 阅读 · 0 评论 -
windows C++-创建使用特定计划程序策略的代理
代理是一个应用程序组件,它与其他组件异步工作以解决大型计算任务。代理通常具有设定的生命周期并维护状态。每个代理都可以具有独特的应用程序要求。例如,启用用户交互(检索输入或显示输出)的代理可能需要更高优先级的计算资源访问。通过计划程序策略,可控制计划程序在管理任务时使用的策略。本文演示如何创建使用特定计划程序策略的代理。本文使用异步代理库中的功能(如代理、消息块和消息传递函数)来执行工作。原创 2024-09-28 17:25:25 · 304 阅读 · 0 评论 -
windows C++-指定特定的计划程序策略
通过计划程序策略,可控制计划程序在管理任务时使用的策略。本文演示如何使用计划程序策略来增加将进度指示器打印到控制台的任务的线程优先级。原创 2024-09-25 00:15:00 · 180 阅读 · 0 评论 -
windows C++-计划程序策略
当使用 concurrency::CurrentScheduler::Create、concurrency::Scheduler::Create 或 concurrency::Scheduler::SetDefaultSchedulerPolicy 方法创建计划程序实例时,请提供包含指定计划程序行为的键值对集合的 concurrency::SchedulerPolicy 对象。计划程序策略能控制计划程序在管理任务时使用的策略。与一个计划程序关联的策略不影响任何其他计划程序的行为。原创 2024-09-27 00:15:00 · 392 阅读 · 0 评论 -
windows C++-管理计划程序实例
计划程序实例允许将特定计划策略与各种工作负荷相关联。下面包含两个基本示例,演示如何创建和管理计划程序实例。这些示例创建使用默认计划程序策略的计划程序。原创 2024-09-27 00:15:00 · 320 阅读 · 0 评论 -
windows C++ - 任务计划程序(并发运行时)
如果希望微调并发运行时的现有代码的性能,则任务计划程序会很有用。无法从通用 Windows 平台 (UWP) 应用获取任务计划程序。在 Visual Studio 2015 及更高版本中,concurrency::task 类和 ppltasks.h 中的相关类型使用 Windows 线程池作为其计划程序。本主题不再适用于在 ppltasks.h 中定义的类型。并行算法(例如 parallel_for)继续使用并发运行时作为默认计划程序。原创 2024-09-26 00:15:00 · 1519 阅读 · 0 评论 -
windows C++ 并行编程-同步数据结构
并发运行时提供了几种数据结构,用于同步对来自多个线程的共享数据的访问。当你有不经常修改的共享数据时,这些数据结构很有用。一个同步对象,例如,一个关键部分,会导致其他线程等待,直到共享资源可用。因此,如果使用这样的对象来同步对经常使用的数据的访问,会失去应用程序的可扩展性。并行模式库 (PPL) 提供了 concurrency::combinable 类,使你能够在无需同步的情况下在几个线程或任务之间共享资源。原创 2024-09-26 00:15:00 · 489 阅读 · 0 评论 -
windows C++-同步数据结构与 Windows API
将并发运行时提供的同步数据结构的行为与 Windows API 提供的同步数据结构的行为进行比较。并发运行时提供的同步数据结构遵循协作线程模型。在协作线程模型中,同步基元显式将其处理资源传递给其他线程。这与抢占式线程模型不同,其中处理资源由控制调度程序或操作系统转移到其他线程。原创 2024-09-25 00:15:00 · 321 阅读 · 0 评论 -
windows C++ 并行编程-定期发送消息
该示例演示如何使用 concurrency::timer 类定期发送消息。原创 2024-09-24 00:15:00 · 383 阅读 · 0 评论 -
windows C++ 并行编程-实现各种生产者-消费者模式
本文介绍如何在应用程序中实现生产者-使用者模式。在此模式下,制造者向消息块发送消息,使用者从该块读取消息。本文演示了两种方案。在第一种方案中,使用者必须接收生产者发送的每条消息。在第二种方案中,使用者定期轮询数据,因此不必接收每条消息。本文中的这两个示例都使用代理、消息块和消息传递函数将消息从生产者传输到使用者。生产者代理使用 concurrency::send 函数将消息写入 concurrency::ITarget 对象。原创 2024-09-22 00:15:00 · 168 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(五)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-21 00:01:11 · 474 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(四)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-21 00:01:08 · 1036 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(三)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-20 23:46:10 · 414 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(二)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-20 23:45:59 · 381 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(一)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-19 00:15:00 · 786 阅读 · 0 评论 -
windows C++ 并行编程-异步代理库概述
异步代理库(简称代理库)提供了一个编程模型,该模型可提高支持并发的应用程序开发的可靠性。代理库是一个 C++ 模板库,为粗粒度数据流和管道任务提升了基于角色的编程模型和进程内消息传递。代理库构建在并发运行时的计划和资源管理组件上。原创 2024-09-19 00:15:00 · 623 阅读 · 0 评论 -
windows C++ 并行编程-使用取消中断
示例1说明如何使用取消操作来实现基本的并行搜索算法;示例2演示如何编写基本树结构的搜索算法;示例3则是在树中搜索值。原创 2024-09-18 00:15:00 · 485 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(四)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-18 00:15:00 · 893 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(三)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-17 00:15:00 · 799 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(二)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-17 00:15:00 · 694 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(一)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-16 00:15:00 · 683 阅读 · 0 评论 -
windows C++ 并行编程-使用 combinable 提高性能
在某些情况下,并行映射 (concurrency::parallel_transform) 和化简 (concurrency:: parallel_reduce) 可以通过 combinable 实现性能改进。原创 2024-09-16 00:15:00 · 300 阅读 · 0 评论 -
windows C++ 并行编程-并行容器和对象
并行模式库 (PPL) 包括几个容器和对象,这些容器和对象提供对其元素的线程安全访问。并发容器提供对最重要操作的并发安全访问。在这里,并发安全意味着指针或迭代器始终有效。它不保证元素初始化或特定的遍历顺序。这些容器的功能与 C++ 标准库提供的功能类似。例如,concurrency::concurrent_vector 类与 std::vector 类类似,但 concurrent_vector 类允许并行追加元素。如果并行代码需要对同一容器进行读写访问,请使用并发容器。并发对象在组件之间并发共享。原创 2024-09-15 00:15:00 · 407 阅读 · 0 评论 -
windows C++ 并行编程-编写 parallel_for_each 循环
示例1演示如何使用 concurrency::parallel_for_each 算法并行计算 std::array 对象中的质数计数;示例2演示了如何使用 concurrency::parallel_transform 和 concurrency::parallel_reduce 算法以及 concurrency::concurrent_unordered_map 类计数文件中的单词出现次数。原创 2024-09-15 00:15:00 · 760 阅读 · 0 评论 -
windows C++ 并行编程-编写parallel_for 循环
此示例并行化外部循环只是因为它执行了足够的工作,可从并行处理的开销中受益。如果将内部循环并行化,你将不会获得性能提升,因为内部循环执行的少量工作并不能克服并行处理的开销问题。以下示例演示了该 parallel_matrix_multiply 函数,该函数使用 parallel_for 算法并行执行外部循环。以下更完整的示例比较了 matrix_multiply 函数与 parallel_matrix_multiply 函数的性能。以下示例显示了 matrix_multiply 函数,可计算两个方阵的乘积。原创 2024-09-14 03:45:00 · 300 阅读 · 0 评论 -
windows C++-并行编程-并行算法(五) -选择排序算法
并行模式库 (PPL) 提供了对数据集合并行地执行工作的算法。这些算法类似于 C++ 标准库提供的算法。并行算法由并发运行时中的现有功能组成。原创 2024-09-14 03:30:00 · 745 阅读 · 0 评论 -
windows C++-并行编程-并行算法(四)- 并行排序
PPL 提供三种排序算法:concurrency::parallel_sort、concurrency::parallel_buffered_sort 和 concurrency::parallel_radixsort。parallel_sort 和 parallel_buffered_sort 算法都是基于比较的算法。parallel_buffered_sort 算法的性能好于 parallel_sort,但是它需要 O(N) 空间。通过使用键,此算法可以直接计算元素的目标,而不是使用比较。原创 2024-09-13 23:11:39 · 399 阅读 · 0 评论 -
windows C++-并行编程-并行算法(三)-分区工作
并行模式库 (PPL) 提供了对数据集合并行地执行工作的算法。这些算法类似于 C++ 标准库提供的算法。并行算法由并发运行时中的现有功能组成。原创 2024-09-13 23:11:28 · 426 阅读 · 0 评论 -
windows C++-并行编程-并行算法(二)
concurrency::parallel_transform 和 concurrency::parallel_reduce 算法分别是 C++ 标准库算法 std::transform 和 std::accumulate 的并行版本。第二种方法是使用派生自 std::unary_function 的 std::negate。在许多情况下,你可以将 parallel_reduce 视为 parallel_for_each 算法与 concurrency::combinable 类一起使用的简写形式。原创 2024-09-12 00:15:00 · 609 阅读 · 0 评论 -
windows C++-并行编程-并行算法(一)
并行模式库 (PPL) 提供了对数据集合并行地执行工作的算法。这些算法类似于 C++ 标准库提供的算法。并行算法由并发运行时中的现有功能组成。例如,concurrency::parallel_for 算法使用 concurrency::structured_task_group 对象执行并行循环迭代。根据可用的计算资源数,parallel_for 算法以最佳的方式对工作进行分区。原创 2024-09-12 00:15:00 · 969 阅读 · 0 评论 -
windows C++-并行编程-创建在延迟一段时间后完成的任务
此示例演示如何使用 concurrency::task、concurrency::cancellation_token_source、concurrency::cancellation_token、concurrency::task_completion_event、concurrency::timer 和 concurrency::call 类创建在延迟一段时间后完成的任务。可以使用此方法生成偶尔轮询数据的循环。还可介绍超时、未在预定时间内处理用户输入等情况。原创 2024-09-11 00:15:00 · 489 阅读 · 0 评论 -
windows C++-并行编程-使用 parallel_invoke 来执行并行操作
此示例演示如何使用 concurrency::parallel_invoke 算法提高对共享数据源执行多项操作的程序的性能。因为没有操作会修改源,所以可以直接的方式并行执行。原创 2024-09-11 00:15:00 · 400 阅读 · 0 评论 -
windows C++-并行编程-使用 parallel_invoke 来编写并行排序例程
本文档介绍如何使用 parallel_invoke 算法来提高双调排序算法的性能。双调排序算法以递归方式将输入序列划分为较小的排序分区。双调排序算法可以并行运行,因为每个分区操作都独立于所有其他操作。虽然双调排序是对输入序列的所有组合进行排序的排序网络的一个示例,但此示例对长度为 2 的幂的序列进行排序。为了便于说明,此示例使用并行排序例程。原创 2024-09-10 00:15:00 · 354 阅读 · 0 评论