C语句模拟多任务实例
#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语句模拟多任务实例的更多相关文章
- SQL语句学习手册实例版
SQL语句学习手册实例版 表操作 例1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
- [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:
http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...
- JAVA模拟登录实例
近期在做公司一个web项目.要求在我们的系统上,可以显示其它站点上的数据. 刚開始接到这个任务时,还在想.简单的非常.直接用UrlConection直接进入该网页,然后获取该网页的html,取到想要的 ...
- webdriver中的定位\模拟\及实例
Selenium webdriver 下载 pip install selenium pip install -i https://pypi.doubanio.com/simple/ selenium ...
- SQL 循环语句 while 介绍 实例
declare @i int begin insert into test (userid) values(@i) end --------------- while 条件 begin 执行操作 en ...
- Mysql之case语句(附带实例)
这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case when… then …end 1.判断的同时改变其值 eg: ...
- PHP中利用pcntl实现多进程(模拟多线程)实例(转)
windows不支持pcntl的多线程(非Unix类系统不支持此模块),pcntl在很久很久之前就听过了,但是一直没有尝试着真正要用它. 这不,遇到socket问题了,看socket,遇到pcntl了 ...
- if嵌套语句 shell脚本实例 测试是否闰年
在 if 语句里面,你可以使用另外一个 if 语句.只要你能逻辑管理 你就可以使用多层嵌套. 以下是一个测试闰年的例子: #!/bin/bash # This script will test if ...
- vertica从其它表迁移数据到新表(insert into 语句使用方法实例)
版权声明:本文为博主原创文章.博主同意自由转载. https://blog.csdn.net/tx18/article/details/26585649 #例:迁移微博用户数据. 因为源表weiboF ...
随机推荐
- SOA架构是什么?
https://blog.csdn.net/u013343616/article/details/79460398 SOA是什么?SOA全英文是Service-Oriented Architectur ...
- ajax处理返回的三种格式(json格式 , xml通用格式 , html文本格式)(数据类型:整数、字符串、数组、对象)(基础最重要!)
ajax方法的参数 常用的ajax参数比如url,data,type,包括预期返回类型dataType,发送到服务器的数据的编码类型contentType,成功方法,失败方法,完成方法.除了这些以外还 ...
- jenkins 更改端口
方法一 在Jenkins目录下,运行一下命令: java -jar jenkins.war --ajp13Port=-1 --httpPort=8081 出现了错误: C:\Program Files ...
- Web核心之tomcat汤姆猫
web相关概念 1. 软件架构 1. C/S:客户端/服务器端 2. B/S:浏览器/服务器端 2. 资源分类 1. 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏 ...
- linux mail 发送邮件
1.mail -s "Title“ 123456@163.com 只有主题,没有内容 2. 有邮件内容 echo "text" | mail -s "Tit ...
- Python 中内建属性 __getattribute__
参考自:https://blog.csdn.net/yitiaodashu/article/details/78974596 __getattribute__是属性访问拦截器,就是当这个类的属性被访问 ...
- linux0.11内核源码——用户级线程及内核级线程
参考资料:哈工大操作系统mooc 用户级线程 1.每个进程执行时会有一套自己的内存映射表,即我们所谓的资源,当执行多进程时切换要切换这套内存映射表,即所谓的资源切换 2.但是如果在这个进程中创建线程, ...
- BUUCTF | easy_tornado
第一次遇到模板注入的题,赶紧记笔记,此篇相当于对大佬的做法的复现Orz,师傅太强了https://blog.csdn.net/weixin_44255856/article/details/97687 ...
- html中ul,ol和li的区别
ul是无序列表,全称是unordered list,先来个例子: ●张三 ●李四 ●王二 ●刘五 ol是有序列表 ,全称是ordered list,同样举个例子: 1.张 ...
- python生成接口自动化测试报告模版
1:准备html模版 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...