目录
使用 Windows API 的多线程 C 程序。
示例
首页 后端开发 C++ 在C程序中的Windows线程API

在C程序中的Windows线程API

Sep 05, 2023 pm 07:17 PM
c程序 线程api windows线程

在C程序中的Windows线程API

线程是在 Windows API 中使用 CreateThread() 函数创建的,并且就像在 Pthreads 中一样,安全信息、堆栈大小和线程标志等一组属性将传递给该函数。在下面的程序中,我们使用这些属性的默认值。 (默认值最初不会将线程设置为挂起状态,而是使其有资格由 CPU 调度程序运行。)创建求和线程后,父级必须等待其完成,然后才能输出 Sum 的值,因为该值是由求和线程设置的。在 Pthread 程序中,我们使用 pthread join() 语句让父线程等待求和线程。这里,使用 WaitForSingleObject() 函数,我们在 Windows API 中执行与此等效的操作,这会导致创建线程阻塞,直到求和线程已退出。在需要等待多个线程完成的情况下,可以使用 WaitForMultipleObjects() 函数。该函数传递四个参数 -

  • 要等待的对象数量
  • 指向对象数组的指针
  • 指示是否所有对象都已发出信号的标志。
  • 超时持续时间(或无限)

例如,如果 THandles 是大小为 N 的线程 HANDLE 对象的数组,父线程可以等待其所有子线程完成此语句 -

WaitForMultipleObjects(N, THandles, TRUE, INFINITE);

使用 Windows API 的多线程 C 程序。

示例

#include<windows.h>
#include<stdio.h>
DWORD Sum;
/* data is shared by the thread(s) */
/* thread runs in this separate function */
DWORD WINAPI Summation(LPVOID Param){
   DWORD Upper = *(DWORD*)Param;
   for (DWORD i = 0; i <= Upper; i++)
   Sum += i;
   return 0;
}
int main(int argc, char *argv[]){
   DWORD ThreadId;
   HANDLE ThreadHandle;
   int Param;
   if (argc != 2){
      fprintf(stderr,"An integer parameter is required</p><p>");
      return -1;
   }
   Param = atoi(argv[1]);
   if (Param < 0){
      fprintf(stderr,"An integer >= 0 is required</p><p>");
      return -1;
   }
   /* create the thread */
   ThreadHandle = CreateThread( NULL, /* default security attributes */ 0, /* default stack size */    
   Summation, /* thread function */ &Param, /* parameter to thread function */ 0, /* default creation    flags */ &ThreadId);
   /* returns the thread identifier */
   if (ThreadHandle != NULL){
      /* now wait for the thread to finish */ WaitForSingleObject(ThreadHandle,INFINITE);
      /* close the thread handle */
      CloseHandle(ThreadHandle);
      printf("sum = %d</p><p>",Sum);
   }
}
登录后复制

以上是在C程序中的Windows线程API的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

将以下内容翻译为中文:C程序将罗马数字转换为十进制数字 将以下内容翻译为中文:C程序将罗马数字转换为十进制数字 Sep 05, 2023 pm 09:53 PM

给出以下是一个将罗马数字转换为十进制数字的C语言算法:算法步骤1-开始步骤2-在运行时读取罗马数字步骤3-长度:=strlen(roman)步骤4-对于i=0到长度-1   步骤4.1-switch(roman[i])     步骤4.1.1-case'm':    &nbs

C++程序比较两个字符串的字典序 C++程序比较两个字符串的字典序 Sep 04, 2023 pm 05:13 PM

字典序字符串比较是指字符串按照字典顺序进行比较。例如,如果有两个字符串'apple'和'appeal',第一个字符串将排在后面,因为前三个字符'app'是相同的。然后对于第一个字符串,字符是'l',而在第二个字符串中,第四个字符是'e'。由于'e'比'l'短,所以如果我们按照字典顺序排列,它将排在前面。在安排之前,字符串按字典顺序进行比较。在本文中,我们将看到使用C++进行按字典顺序比较两个字符串的不同技术。在C++字符串中使用compare()函数C++string对象有一个compare()

C++程序以给定值为参数,找到双曲正弦反函数的值 C++程序以给定值为参数,找到双曲正弦反函数的值 Sep 17, 2023 am 10:49 AM

双曲函数是使用双曲线而不是圆定义的,与普通三角函数相当。它从提供的弧度角返回双曲正弦函数中的比率参数。但要做相反的事,或者换句话说。如果我们想根据双曲正弦值计算角度,我们需要像双曲反正弦运算一样的反双曲三角运算。本课程将演示如何使用C++中的双曲反正弦(asinh)函数,使用双曲正弦值(以弧度为单位)计算角度。双曲反正弦运算遵循以下公式-$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})},其中\:In\:是\:自然对数\:(log_e\:k)

C程序以找到链表的长度 C程序以找到链表的长度 Sep 07, 2023 pm 07:33 PM

链接列表使用动态内存分配,即它们相应地增长和收缩。它们被定义为节点的集合。这里,节点有两部分,即数据和链路。数据、链接和链表的表示如下-链表的类型链表有四种类型,如下:-单链表/单链表双/双向链表循环单链表循环双链表我们使用递归方法求链表长度的逻辑是-intlength(node*temp){  if(temp==NULL)   returnl;  else{&n

C++程序打印字典 C++程序打印字典 Sep 11, 2023 am 10:33 AM

映射是C++中的一种特殊类型的容器,其中每个元素都是一对两个值,即键值和映射值。键值用于索引每个项目,映射值是与键关联的值。无论映射值是否唯一,键始终是唯一的。要在C++中打印映射元素,我们必须使用迭代器。一组项目中的一个元素由迭代器对象指示。迭代器主要与数组和其他类型的容器(例如向量)一起使用,并且它们具有一组特定的操作,可用于识别特定范围内的特定元素。可以增加或减少迭代器来引用范围或容器中存在的不同元素。迭代器指向范围内特定元素的内存位置。使用迭代器在C++中打印地图首先,我们看一下如何定义

C程序使用rename()函数更改文件名 C程序使用rename()函数更改文件名 Sep 21, 2023 pm 10:01 PM

rename函数将文件或目录从旧名称更改为新名称。此操作类似于移动操作。因此,我们也可以使用此rename函数来移动文件。此函数存在于stdio.h库头文件中。rename函数的语法如下:intrename(constchar*oldname,constchar*newname);rename()函数的功能它接受两个参数。一个是oldname,另一个是newname。这两个参数都是指向常量字符的指针,用于定义文件的旧名称和新名称。如果文件重命名成功,则返回零;否则,返回非零整数。在重命名操作期间

获取给定复数的虚部的C++程序 获取给定复数的虚部的C++程序 Sep 06, 2023 pm 06:05 PM

现代科学在很大程度上依赖于复数的概念,这一概念最初是通过GirolamoCardano在16世纪引入的在17世纪初建立。复数的公式是a+ib,其中a保留html代码并且b是实数。一个复数被认为有两个部分:实部<a>和虚部(<ib>)。i或iota的值为√-1。C++中的复数类是一个用于表示复数的类。C++中的complex类可以表示并控制几个复数操作。我们来看一下如何表示和控制显示复数。imag()成员函数如前所述,复数由实部和虚部两部分组成。显示实部我们使用real()

C++程序来检查一个字符是否为字母或非字母 C++程序来检查一个字符是否为字母或非字母 Sep 14, 2023 pm 03:37 PM

在解决一些逻辑编程问题时,使用字符串或字符有时非常有用。字符串是字符的集合,字符是1字节数据类型,用于保存ASCII值中的符号。符号可以是英文字母、数字或特殊字符。在本文中,我们将学习如何使用C++检查一个字符是否是英文字母或字母表中的字母。检查isalpha()函数要检查数字是否是字母,我们可以使用ctype.h头文件中的isalpha()函数。这将一个字符作为输入,如果是字母表,则返回true,否则返回false。让我们看看下面的C++实现来了解这个函数的用法。Example的中文翻译为:示

See all articles