1. #include <stdlib.h>
  2. #include <stdio.h>
  3. // 任务类型定义
  4. typedef struct _myTask
  5. {
  6. struct _coefficient
  7. {
  8. unsigned char a;
  9. unsigned char b;
  10. unsigned char c;
  11. } co;
  12. struct _variable
  13. {
  14. unsigned int x;
  15. unsigned long y;
  16. } v;
  17. } myTask;
  18. // 线程常量定义
  19. #define THREAD_OVER -1 // 线程结束
  20. #define THREAD_NOTOVER 0 // 线程未结束
  21. // 功能:任务线程
  22. // 参数:Task: myTask *类型,任务
  23. // Process: unsigned char * 类型,线程指针
  24. // 返回:char 类型
  25. // 0: 线程未结束
  26. // -1: 线程结束
  27. // 备注:
  28. char myThread(myTask *Task, unsigned char *Process)
  29. {
  30. unsigned int z;
  31. char ret = 0;
  32. switch(*Process)
  33. {
  34. case 0:
  35. Task->v.x = rand(); // 获取随机数
  36. Task->v.y = 3;
  37. break;
  38. case 1:
  39. Task->v.y *= Task->v.x;
  40. Task->v.y *= Task->v.x;
  41. break;
  42. case 2:
  43. z = 7 * Task->co.a * Task->co.b * Task->v.x;
  44. Task->v.y += z;
  45. break;
  46. case 3:
  47. z = Task->co.c;
  48. Task->v.y += z;
  49. }
  50. printf("(*Process) = %d,\n", (*Process));
  51. (*Process)++;
  52. if(*Process>4)
  53. {
  54. ret = -1; // 线程结束
  55. printf("(*Process) = %d ret = %d,\n", (*Process),ret);
  56. *Process = 0;
  57. }
  58. return ret;
  59. }
  60. // 任务定义
  61. myTask Task1, Task2;
  62. // 功能:任务初始化
  63. // 参数:Task: myTask *类型,任务
  64. // a, b, c:unsigned char 类型,方程式系数
  65. // 返回:无
  66. // 备注:
  67. void InitTask(myTask *Task, unsigned char a, unsigned char b, unsigned char c)
  68. {
  69. Task->co.a = a;
  70. Task->co.b = b;
  71. Task->co.c = c;
  72. }
  73. int main(void)
  74. {
  75. // OS变量定义区
  76. // 任务1 OS变量
  77. char isTask_1_Living = 1;
  78. unsigned char Task1_Thread_Process = 0;
  79. // 任务2 OS变量
  80. char isTask_2_Living = 1;
  81. unsigned char Task2_Thread_Process = 0;
  82. char i=0;
  83. // 初始化任务
  84. InitTask(&Task1, 9, 7, 18);
  85. InitTask(&Task2, 4, 13, 16);
  86. for(i=0; i<5; ++i)
  87. {
  88. if(isTask_1_Living) // 如果任务1活着
  89. {
  90. isTask_1_Living = !myThread(&Task1, &Task1_Thread_Process);
  91. }
  92. if(isTask_2_Living) // 如果任务2活着
  93. {
  94. isTask_2_Living = !myThread(&Task2, &Task2_Thread_Process);
  95. }
  96. printf("Task1_Thread_Process = %d,\n", Task1_Thread_Process);
  97. printf("Task2_Thread_Process = %d,\n", Task2_Thread_Process);
  98. }//while
  99. return 0;
  100. //system("pause");
  101. //exit(0);
  102. }
  1. (*Process) = 0,
  2. (*Process) = 0,
  3. Task1_Thread_Process = 1,
  4. Task2_Thread_Process = 1,
  5. (*Process) = 1,
  6. (*Process) = 1,
  7. Task1_Thread_Process = 2,
  8. Task2_Thread_Process = 2,
  9. (*Process) = 2,
  10. (*Process) = 2,
  11. Task1_Thread_Process = 3,
  12. Task2_Thread_Process = 3,
  13. (*Process) = 3,
  14. (*Process) = 3,
  15. Task1_Thread_Process = 4,
  16. Task2_Thread_Process = 4,
  17. (*Process) = 4,
  18. (*Process) = 5 ret = -1,
  19. (*Process) = 4,
  20. (*Process) = 5 ret = -1,
  21. Task1_Thread_Process = 0,
  22. Task2_Thread_Process = 0,
  23. Terminated with return code 0
  24. Press any key to continue ...

C语句模拟多任务实例的更多相关文章

  1. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

  2. [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

    http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...

  3. JAVA模拟登录实例

    近期在做公司一个web项目.要求在我们的系统上,可以显示其它站点上的数据. 刚開始接到这个任务时,还在想.简单的非常.直接用UrlConection直接进入该网页,然后获取该网页的html,取到想要的 ...

  4. webdriver中的定位\模拟\及实例

    Selenium webdriver 下载 pip install selenium pip install -i https://pypi.doubanio.com/simple/ selenium ...

  5. SQL 循环语句 while 介绍 实例

    declare @i int begin insert into test (userid) values(@i) end --------------- while 条件 begin 执行操作 en ...

  6. Mysql之case语句(附带实例)

    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case  when… then …end 1.判断的同时改变其值 eg:   ...

  7. PHP中利用pcntl实现多进程(模拟多线程)实例(转)

    windows不支持pcntl的多线程(非Unix类系统不支持此模块),pcntl在很久很久之前就听过了,但是一直没有尝试着真正要用它. 这不,遇到socket问题了,看socket,遇到pcntl了 ...

  8. if嵌套语句 shell脚本实例 测试是否闰年

    在 if 语句里面,你可以使用另外一个 if 语句.只要你能逻辑管理 你就可以使用多层嵌套. 以下是一个测试闰年的例子: #!/bin/bash # This script will test if ...

  9. vertica从其它表迁移数据到新表(insert into 语句使用方法实例)

    版权声明:本文为博主原创文章.博主同意自由转载. https://blog.csdn.net/tx18/article/details/26585649 #例:迁移微博用户数据. 因为源表weiboF ...

随机推荐

  1. wxpython 文本框TextCtrl

    path_text = wx.TextCtrl(frame, pos=(5, 5), size=(350, 24))最常用的两个函数:path = path_text.GetValue() conte ...

  2. python运行windows终端程序

    其实是用python控制windows里的shell 1.windows有PowerShell,可以通过搜索打开,运行python不需要打开shell 2.用python里的subprocess函数, ...

  3. @PostMapping

    @PostMapping映射一个POST请求 Spring MVC新特性 提供了对Restful风格的支持 @GetMapping,处理get请求 @PostMapping,处理post请求 @Put ...

  4. DELPHI 10 SEATTLE 在OSX上安装PASERVER

    旧版本的DELPHI在安装目录下里的PASERVER目录有安装文件,但奇怪在这个SEATTLE上的PASERVER目录下只有一个EXE程序的安装程序​​,显然不能安装到OSX里,需要在Embarcad ...

  5. php is_file()函数 语法

    php is_file()函数 语法 is_file()函数怎么用? php is_file()函数用于判断给定文件名是否为一个正常的文件,语法是bool is_file ( string $file ...

  6. paper 162:卷积神经网络(CNN)解析

    卷积神经网络(CNN)解析: 卷积神经网络CNN解析 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer ...

  7. php使用curl实现get和post请求的方法,数据传输urldecode和json

    PHP支持CURL库,利用URL语法规定来传输文件和数据的工具,支持很多协议,包括HTTP.FTP.TELNET等. 优点:是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS.CURL ...

  8. mongodb在linux 上要注意的一些东西

    没有配成开机启动服务,在bin目录下还要使用./mongod去启动,暂时先这样,另外要说的是, child process failed, exited with error number 1说明配置 ...

  9. 110、TensorFlow张量值的计算

    import tensorflow as tf #placeholders在没有提供具体值的时候不能使用eval方法来计算它的值 # 另外的建模方法可能会使得模型变得复杂 # TensorFlow 不 ...

  10. android 关联某些后缀使用app打开

    <intent-filter> <action android:name="android.intent.action.VIEW" /> <categ ...