#include <stdlib.h>
#include <stdio.h> // 任务类型定义
typedef struct _myTask
{
struct _coefficient
{
unsigned char a;
unsigned char b;
unsigned char c;
} co; struct _variable
{
unsigned int x;
unsigned long y;
} v;
} myTask; // 线程常量定义
#define THREAD_OVER -1 // 线程结束
#define THREAD_NOTOVER 0 // 线程未结束 // 功能:任务线程
// 参数:Task: myTask *类型,任务
// Process: unsigned char * 类型,线程指针
// 返回:char 类型
// 0: 线程未结束
// -1: 线程结束
// 备注:
char myThread(myTask *Task, unsigned char *Process)
{
unsigned int z;
char ret = 0; switch(*Process)
{
case 0:
Task->v.x = rand(); // 获取随机数
Task->v.y = 3;
break;
case 1:
Task->v.y *= Task->v.x;
Task->v.y *= Task->v.x;
break;
case 2:
z = 7 * Task->co.a * Task->co.b * Task->v.x;
Task->v.y += z;
break;
case 3:
z = Task->co.c;
Task->v.y += z;
}
printf("(*Process) = %d,\n", (*Process));
(*Process)++;
if(*Process>4)
{ ret = -1; // 线程结束
printf("(*Process) = %d ret = %d,\n", (*Process),ret);
*Process = 0;
} return ret;
} // 任务定义
myTask Task1, Task2; // 功能:任务初始化
// 参数:Task: myTask *类型,任务
// a, b, c:unsigned char 类型,方程式系数
// 返回:无
// 备注:
void InitTask(myTask *Task, unsigned char a, unsigned char b, unsigned char c)
{
Task->co.a = a;
Task->co.b = b;
Task->co.c = c;
} int main(void)
{
// OS变量定义区
// 任务1 OS变量
char isTask_1_Living = 1;
unsigned char Task1_Thread_Process = 0;
// 任务2 OS变量
char isTask_2_Living = 1;
unsigned char Task2_Thread_Process = 0; char i=0;
// 初始化任务
InitTask(&Task1, 9, 7, 18);
InitTask(&Task2, 4, 13, 16); for(i=0; i<5; ++i)
{
if(isTask_1_Living) // 如果任务1活着
{
isTask_1_Living = !myThread(&Task1, &Task1_Thread_Process);
} if(isTask_2_Living) // 如果任务2活着
{
isTask_2_Living = !myThread(&Task2, &Task2_Thread_Process);
}
printf("Task1_Thread_Process = %d,\n", Task1_Thread_Process);
printf("Task2_Thread_Process = %d,\n", Task2_Thread_Process);
}//while return 0;
//system("pause");
//exit(0);
}
(*Process) = 0,
(*Process) = 0,
Task1_Thread_Process = 1,
Task2_Thread_Process = 1,
(*Process) = 1,
(*Process) = 1,
Task1_Thread_Process = 2,
Task2_Thread_Process = 2,
(*Process) = 2,
(*Process) = 2,
Task1_Thread_Process = 3,
Task2_Thread_Process = 3,
(*Process) = 3,
(*Process) = 3,
Task1_Thread_Process = 4,
Task2_Thread_Process = 4,
(*Process) = 4,
(*Process) = 5 ret = -1,
(*Process) = 4,
(*Process) = 5 ret = -1,
Task1_Thread_Process = 0,
Task2_Thread_Process = 0, Terminated with return code 0
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. Joyoshare HEIC Converter for Mac将HEIC照片转换成其他格式的方法

    如何把HEIC格式的照片转换成其JPEG,PNG,GIF他格式呢?使用Joyoshare HEIC Converter for Mac破解版就可以,Joyoshare HEIC Converter是可 ...

  2. js手机号码中间用星号代替。银行卡后四位之外改为星号

    如手机号码13123456789,中间四位用'*'代替 var phone='13123456789' 方法1(字符串的截取): ,)+); 方法2(正则表达式): })\d{}(\d+)/,&quo ...

  3. 分布式消息中间件及RabbitMQ

    分布式应用和集群: 从部署形态来看,它们都是多台机器或者多个进程部署,而且都是为了实现一个业务功能. 如果是一个业务被拆分成多个子业务部署在不同的服务器上,那就是分布式应用 如果是同一个业务部署在多台 ...

  4. Struts2基础-4 -struts拦截器

    Struts2拦截器工作原理 拦截器围绕着 Action和 Result的执行而执行. Struts2拦截器的工作方式如图10.2所示.从上图中可以看出, Struts2拦截器的实现原理和 Servl ...

  5. [CSP-S模拟测试]:attack(支配树+LCA+bitset)

    题目传送门(内部题55) 输入格式 第一行,包含两个整数:$n,m,q$,表示敌军城市数.路数和情报数.接下来$m$行,每行包含两个整数:$u,v$,表示从$u$到$v$包含一条单向道路.接下来$q$ ...

  6. AtCoder Grand Contest 012 A - AtCoder Group Contest(贪心)

    Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement There are 3N participa ...

  7. 2016年Esri技术公开课全年资料分享

    大家好,2016年的公开课活动在上周全部结束,感谢大家的支持. 2016年的公开课共进行20期,共有24位讲师参与,公开课视频播放.课件下载次数累计超10万次,在这里衷心的感谢大家的积极参与和分享精神 ...

  8. Nginx (限速)限制并发、限制访问速率、限制流量

    Nginx 限制并发访问速率流量,配置还是简单的,看下Nginx文档根据文中这三个模块对照看一下就可以,Nginx限速使用的是漏桶算法(感兴趣可以看下文末的参考资料),需要注意的是:当需要进行限速操作 ...

  9. Php 单元测试 phpunit && codecept

    Php 单元测试 phpunit && codecept phpunit: Windows版本 整体上说,在 Windows 下安装 PHAR 和手工在 Windows 下安装 Com ...

  10. upc组队赛15 Supreme Number【打表】

    Supreme Number 题目链接 题目描述 A prime number (or a prime) is a natural number greater than 1 that cannot ...