有关C语言时间轮转算法

//大神帮看看哪有错,怎么改,谢谢了!
#include
#include
#define NULL 0
int s=1;
struct PCB{
char p_name[20];
int arrivetime;
int p_needTime;
int p_runTime;
char p_state;
struct PCB* next;
};
void RoundRobin();
char Choice();

int main()
{

char choice = Choice();
switch(choice)
{

    case '1':
        system("cls");
        RoundRobin();
        break;
    case '2':
        return 0;
        break;
    default:
        break;
}
system("pause");
return 0;

}
char Choice()
{
printf("\n\n");
printf(" ********************************************* \n");
printf(" 进程调度演示\n");
printf(" ********************************************* \n\n\n");

printf(" 1.演示轮转法算法.\n");
printf(" 2.退出程序.\n\n");
printf(" 选择进程调度方法:");

char ch = getchar();
return ch;
system("cls");
}

//轮转算法
void RoundRobin()
{
int N,TIME;
printf("请指明时间片大小:");
scanf("%d",&N);
int n;
struct PCB processes, *pt,*min,*q,*de,*z,*x;
processes = pt = min=q=de=(struct PCB
)malloc(sizeof(struct PCB));

struct PCB p,*ptem;
ptem=p=z=x=(struct PCB
)malloc(sizeof(struct PCB));
z=pt;
x=q;
printf("请输入需要运行进程数:");
scanf("%d",&n);

for (int i = 0; i<n; ++i)//输入队列
{ 
    printf("输入进程名:");
    scanf("%s", &p->p_name);
    printf("输入进程运行时间:");
    scanf("%d", &p->p_needTime);
    printf("请输入到达时间:");
    scanf("%d,&p->arrivetime");
    p->p_runTime = p->p_needTime;
    p->p_state = 'W';
    z->next=p;
    z=z->next;
    printf("\n");
}
z->next=NULL;
z=pt->next;

for(i=1;i<n;i++)//排成有序队列
{
    min=z;
    while(z->next!=NULL)//选出输入队列最早到达的·
    {
        if(min->arrivetime>z->next->arrivetime)
        {
            min=z->next;
            p=z;
        }
        z=z->next;
    }
    z=p;
    z->next=min->next;
    x->next=min;//插入有序队列
    x=x->next;
}
z=pt->next;
x->next=z;
x=x->next;
x->next=NULL;
x=q->next;
q->next=x->next;
processes->next=x;
de=processes->next;
de->next=NULL;
TIME=x->arrivetime;
int cases = 0;
while (s)//开始运算队列
{
    if(de==NULL)
    {
        printf("进程全部结束!");
        s=0;
        continue;
    }
    ++cases; 
    printf("第%d轮: \n", cases);
    printf("**** 当前正在运行的进程是:%s\n", de->p_name);
    de->p_state = 'R';
    if(de->p_runTime<=N)
    {
        TIME=TIME+de->p_runTime;
        de->p_state='f';
        de->p_runTime=0;
    }
    else 
    {
        TIME=TIME+N;
        de->p_runTime-=N;
    }

    printf("进程名  状态  共需时间  还需时间\n");
    printf("%s\t%c\t%d\t%d\t\n\n", de->p_name, de->p_state, de->p_needTime, de->p_runTime);

    printf("**** 当前就绪状态的队列为:\n\n");       
    while (de->next != NULL)
    {
        de=de->next;
        printf("进程名   状态  共需时间   还需时间\n");
        printf("%s\t%c\t%d\t%d\t\n\n", de->p_name, de->p_state, de->p_needTime, de->p_runTime);
    }
    ptem=de;//最后一个进程用ptem表示
    de=processes->next;
    if(de->p_state =='f')//删除状态为f的进程
    {
        processes->next=de->next;
        de=processes->next;
    }
    else//将执行过的进程插到队尾
    {
        de->p_state='w';  
        processes->next=de->next;
        ptem->next=de;
        ptem=ptem->next;
        ptem->next=NULL;
    }
    while(q->next!=NULL&&q->next->arrivetime<TIME)//从序列队列中找出适合的插到执行队列
    {
            x=q->next;
            q->next=x->next;
            ptem->next=x;
            ptem=ptem->next;
            ptem->next=NULL;
    }

    while(de==NULL&&q->next!=NULL)
    {
        x=q->next;
        q->next=x->next;
        ptem->next=x;
        ptem=ptem->next;
        ptem->next=NULL;
    }
    de=processes->next;
}

}

1个回答

cwtaxx110
cwtaxx110 已解决,三克油。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
有关简单轮转算法 c语言
#include <stdio.h> #include <stdlib.h> #define furthest 5 struct process /*PCB STRUCTURE*/ { int id;//进程表示符 int priority;//优先级 int cputime;//占用CPU时间片数 int alltime;//进程所需时间片数 char state;//进程状态 int next; } prochain[furthest]; int procnum;// int rand();// int algo;// int run,head,tail,j;/*RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAIL—进程就绪链链尾指针*/ void print() /*PRINT THE RUNNING PROCESS,WAITING QUEUE AND PCB SEQUENCE LIST*/ { printf("输出系统的变量run:%d、head:%d、tail:%d\n",run,head,tail); printf("输出run的变量\n"); printf("id:%d priority:%d cputime:%d alltime:%d state:%c next:%d",prochain[run].id,prochain[run].priority,prochain[run].cputime,prochain[run].alltime,prochain[run].state,prochain[run].next); int k,p; for (k=1;k<=40;k++) printf("="); printf("\nrunning process%d",prochain[run].id); printf("\nwaiting queue."); printf("\n %d ",prochain[run].id); p=head; while(p!=0) { printf("%5d",p); p=prochain[p].next;} printf("\n"); for (k=1;k<=40;k++) printf("="); printf("\n"); printf(" id "); for (k=1;k<furthest+1;k++) printf("%5d",prochain[k].id); printf("\n"); printf("priority "); for (k=1;k<furthest+1;k++) printf("%5d",prochain[k].priority); printf("\n"); printf("cputime "); for (k=1;k<furthest+1;k++) printf("%5d",prochain[k].cputime); printf("\n"); printf("alltime "); for (k=1;k<furthest+1;k++) printf("%5d",prochain[k].alltime); printf("\n"); printf("state "); for (k=1;k<furthest+1;k++) printf("%5c",prochain[k].state); printf("\n"); printf("next "); for (k=1;k<furthest+1;k++) printf("%5d",prochain[k].next); printf("\n"); getchar(); } void insert(int q) /*INSERT A PROCESS*/ { int p,s; p=head; s=prochain[head].next; while((prochain[q].priority<prochain[s].priority)&&(s!=0)) { p=s; s=prochain[s].next;} prochain[p].next=q; prochain[q].next=s; } void insert2() /*PUT A PROCESS ONTO THE TAIL OF THE QUEUE*/ { printf("调用insert2\n"); prochain[tail].next=run; tail=run; prochain[run].next=0; } void init() /*CREATE A WAITING QUEUE*/ { int i; head=0; if (algo==2) { for (i=1;i<furthest+1;i++) { prochain[i].id=i; prochain[i].priority=(rand()+11)%41; prochain[i].cputime=0; prochain[i].alltime=(rand()+1)%7; prochain[i].state='W'; prochain[i].next=0; if((prochain[i].priority<prochain[head].priority)&&(head!=0)) insert(prochain[i].id); else { prochain[i].next=head; head=prochain[i].id;} } } else { for (i=1;i<furthest+1;i++) { prochain[i].id=i; prochain[i].priority=(rand()+1)%3+1; prochain[i].cputime=0; prochain[i].alltime=(rand()+1)%7; prochain[i].state='W'; prochain[i].next=(i+1);//%(furthest+1); } head=1; tail=furthest; prochain[tail].next=0;//tail原为furthest } run=head; prochain[run].state='R'; head=prochain[head].next; prochain[run].next=0; print(); } void prisch() /*THE PROCESS WITH PRIO algoRITHM*/ { while(run!=0) { prochain[run].cputime+=1; prochain[run].priority-=3; prochain[run].alltime-=1; if(prochain[run].alltime==0) { prochain[run].state='F'; prochain[run].next=0; if(head!=0) { run=head; prochain[run].state='R'; head=prochain[head].next; } else { prochain[0].id=prochain[run].id; run=0; } } else { if((prochain[run].priority< prochain[head].priority)&&(head!=0)) { prochain[run].state='W'; insert(run); run=head; prochain[run].state='R'; head= prochain[head].next; } } print(); }//end while }//end prisch() void timesch() /*THE PROCESS WITH RR ALRORITHM*/ { while(run!=0) { prochain[run].alltime-=1; prochain[run].cputime+=1; if(prochain[run].alltime==0) { prochain[run].state='F'; prochain[run].next=0; if(head!=0) { run=head; prochain[run].state='R'; head=prochain[head].next;} else { prochain[0].id=prochain[run].id; run=0; } } else { if((prochain[run].cputime==prochain[run].priority)&&(head!=0)) { prochain[run].state='W'; //prochain[run].cputime=0; //insert2(); prochain[tail].next=run; tail=run; prochain[run].next=0; run=head; prochain[run].state='R'; head=prochain[head].next; } }//end else print(); }//end while }//end timesch void main() /*MAIN PROGRAM*/ { agan: printf("type the algorithm is (1:RR,2:PRIO):"); scanf("%d",&algo); if (algo==2) { printf("output of priority.\n"); init(); prisch(); } else { if (algo==1) { printf("output of round robin.\n"); init(); timesch();} else { printf("try again,please\n"); goto agan; } } for (j=1;j<=40;j++) printf("="); printf("\n\n"); for (j=1;j<=40;j++) printf("="); printf("\n\n"); printf("system finished\n"); } 这个有什么bug啊 轮转是只进行一轮,而优先级是不会停止
js的时间片轮转算法该怎么写,怎么用js调度进程
js的时间片轮转算法该怎么写,怎么用js调度进程。。。。。。。。。。。。。。。
linux时间片轮转算法问题
在linux中在时间片轮转调度中,如果一个进程在一个时间片内就已经运行结束,那剩下的时间片时间怎么利用?剩下的时间片是继续运行下一个进程还是计时器清零开始一个新的时间片计时呢?如果是继续运行下一个进程,当这个时间片时间结束的时候,而继续执行的进程未完成,cpu会不会被剥夺给另外一个进程呢?可以给出一些参考文献吗??
基于优先级的时间片轮转调度算法
求一个基于优先级的时间片轮转调度算法。实在是不太会做了,没思路。要求java 要求: (1)设系统中有n个进程,每个进程PCB格式如下: 进程ID; 进程名称:p1,..., pn; 进程状态:1-运行,2-就绪,3-等待,0-完成; 进程类型:0-系统进程,1-用户进程; 请求资源时刻; 需要的CPU时间; 已运行时间; 优先级:数字小的优先级高; 指向下一进程的指针。 (2)在调度程序运行之前,输入进程名称、所需CPU时间等。 (3)设计4个队列,完成队列,运行队列,就绪队列和等待队列。 (4)调度程序选择就绪队列首进程运行,采用时间片轮转法,输出调度过程。
时间片轮转调度算法中C++结构体指针空值问题
// 时间片轮转调度算法.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> #include <iomanip> #include <stdlib.h> #include <malloc.h> using namespace std; int ArrivalTime[100]; //进程到达时间 int ServiceTime[100]; //进程服务时间 int PServiceTime[100]; //剩余服务时间 int FinishTime[100]; //进程完成时间 int WholeTime[100]; //周转时间 double WeightWholeTime[100]; //带权周转时间 double AverageWT; //平均周转时间 double AverageWWT; //平均带权周转时间 bool Finished[100]; //标记进程是否完成 int n,i,j; //n为进程数量,i和j为循环变量 int q; //q为时间片大小 int NowTime=0; //当前时刻 //定义一个"进程"结构体,包含进程Id,进程所需内容可根据Id号得到 typedef struct Process{ int ProcessID; //进程ID struct Process *next; }Process,*ProcessPtr; //定义一个队列CpuQueue,模仿CPU typedef struct CpuQueue{ int count; ProcessPtr beginzz; //队头指针 ProcessPtr endzz; //队尾指针 }CpuQueue; //初始化队列函数 void InitQueue(CpuQueue &c){ c.count=0; c.beginzz=c.endzz=(ProcessPtr)malloc(sizeof(Process)); c.beginzz->next=NULL; } //判断队列是否为空,如果为空返回true bool IsEmpty(CpuQueue c){ /* if(Q.count==0){ return true; } return false;*/ return c.beginzz==c.endzz?true:false; } //进队函数,将进程号为id的进程进队 void EnQueue (CpuQueue &c,int id){ ProcessPtr p; p=(ProcessPtr)malloc(sizeof(Process)); p->ProcessID=id; p->next = NULL; c.endzz->next=p;; c.endzz = p; c.count++; cout<<"进队1次使用:"<<" 个数:"<<c.count<<endl; } //出队函数,返回队首指针的进程ID号 int DeQueue (CpuQueue &c) { int id; ProcessPtr p; if(c.beginzz->next==NULL){cout<<"yes!"<<endl;} p=c.beginzz->next; id=p->ProcessID; c.beginzz->next = p->next; c.count--; free(p); cout<<"出队1次使用:"<<" 个数:"<<c.count<<endl; return id; } //将进程号在num数组中按规定顺序排列好 //返回num[]为按时间到达先后顺序排列的进程号 int* order(int ArrivalTime[]){ int *num=new int[100]; for(i=0;i<n;i++){ num[i]=i; //初始化num数组 } for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(ArrivalTime[num[i]]<ArrivalTime[num[j]]){ int temp=num[i]; num[i]=num[j]; num[j]=temp; } } } return num; } //时间片轮转调度算法 void RR(){ CpuQueue c; InitQueue(c); int *num=new int[100]; num=order(ArrivalTime); //返回按到达时间先后顺序排列好的数组num if(ArrivalTime[0]>NowTime) { NowTime=ArrivalTime[0]; } EnQueue(c,0); //先把第一个进程进队 bool isFirst=true; i=1; while(!IsEmpty(c)||isFirst){ isFirst=false; int proId=DeQueue(c); if(PServiceTime[proId]<=q){ //当剩余服务时间比时间片q小的情况 NowTime+=PServiceTime[proId]; PServiceTime[proId]=0; //对该进程剩余时间归0 //如果进程在上一个进程完成之前到达,则进队 while(i<n&&ArrivalTime[i]<=NowTime) { EnQueue(c,i); i++; } //对进程数据进行赋值操作 FinishTime[proId]=NowTime; WholeTime[proId]=FinishTime[proId]-ArrivalTime[proId]; //周转时间=完成时间-到达时间 WeightWholeTime[proId]=WholeTime[proId]/ServiceTime[proId]; //带权周转时间=周转时间/服务时间 } else{ //当剩余服务时间比时间片大的情况 PServiceTime[proId]=PServiceTime[proId]-q; //剩余服务时间处理 NowTime=NowTime+q; //如果进程在上一个进程时间片用完之前到达,则进队 while(i<n&&ArrivalTime[i]<=NowTime) { EnQueue(c,i); i++; } EnQueue(c,proId); } } } //输入函数,用于接收数据 void input(){ cout<<"请输入进程数量n: "; cin>>n; while(n<1||n>100){ cout<<"n为1~100之间的整数,请重新输入。n="; cin>>n; } cout<<"-------------------------------------------"<<endl; for(i=0;i<n;i++){ cout<<"请输入第"<<i+1<<"进程的到达时间:"; cin>>ArrivalTime[i]; } cout<<"-------------------------------------------"<<endl; for(i=0;i<n;i++){ cout<<"请输入第"<<i+1<<"进程的服务时间:"; cin>>ServiceTime[i]; } //初始化PServiceTime[] for(i=0;i<n;i++){ PServiceTime[i]=ServiceTime[i]; } cout<<"-------------------------------------------"<<endl; cout<<"请输入时间片大小q: "; cin>>q; } //打印输出函数 //将进程进展情况以表格的形式打印 void print() { cout<<"-------------------------------------------"<<endl; cout<<"进程名\t\t"; for(i=0;i<n;i++) { char c=i+65; cout<<c<<"\t"; } cout<<"\n到达时间\t"; for(i=0;i<n;i++) { cout<<ArrivalTime[i]<<"\t"; } cout<<"\n服务时间\t"; for(i=0;i<n;i++) { cout<<ServiceTime[i]<<"\t"; } cout<<"\n完成时间\t"; for(i=0;i<n;i++) { cout<<FinishTime[i]<<"\t"; } cout<<"\n周转时间\t"; for(i=0;i<n;i++) { cout<<setprecision(3)<<WholeTime[i]<<"\t"; } cout<<"\n带权周转时间\t"; for(i=0;i<n;i++) { cout<<setprecision(3)<<WeightWholeTime[i]<<"\t"; } cout<<"\n剩余服务时间\t"; for(i=0;i<n;i++) { cout<<setprecision(3)<<PServiceTime[i]<<"\t"; } cout<<endl; for(int i=0;i<n;i++) //计算平均周转时间和平均带权周转时间 { AverageWT+=(double)WholeTime[i]/n; AverageWWT+=(double)WeightWholeTime[i]/n; } cout<<endl; cout<<setprecision(3)<<"平均周转时间: "<<AverageWT<<endl; cout<<setprecision(3)<<"平均带权周转时间: "<<AverageWWT<<endl; } int main(int argc, char* argv[]) { input(); RR(); print(); return 0; } 在进队函数中 c.beginzz->next 轮转几次就变为空 我用的输入 进程数:1 到达时间:2 服务时间:3 q=1 测试的
在Windows系统下用C/C++编程实现两种处理机调度算法。
1. CPU Scheduling (1)题目描述 编程实现两种处理机调度算法,可选择的以下组合方式其中之- -: 1) 高优先级优先调度算法和时间片轮转调度算法; 2) 短进程优先调度算法和时间片轮转调度算法; 3) 先入先出调度算法和时间片轮转让调度算法。 选择-一个调度算法,实现处理机调度。(2)功能实现 o输入提示选择哪种算法,例如:输入“0”--HPF,输入“1”--RR; ) 输入提示创建进程的个数,初始化进程; PCB内容:进程名/PID 运行时间 优先权 状态 PCB指针 ●运行过程中须提示所创建进程的状态信息,包括:已运行的时间,还需运行的时间,阻塞的时间,要阻塞多长时间; ●提示进程的状态:运行,就绪,阻塞三者之- -; ●建立进程的PCB, 用队列实现进程就绪队列和阻塞队列的管理。 可随机输入若干进程,并按所选算法的规则排序,从就绪队首选进程运行,进程在运行过程中定时(或发生调度时)更新各进程的状态信息, 进程名状态运行时间 剩余运行时间 优先级进程阻塞属性(有阻塞/无阻塞) 规定系统可接纳的进程的道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备队列调度- -作业进入。 被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。
当CPU时间片轮转运行时,用户态与核心态进程如何切换?
我们知道在CPU时间片轮转的时候,程序每轮只占有一部分时间。而且计算机中大部分进程也都要执行。那么CPU时间片轮转的时候用户态进程和核心态进程是否是一起轮转的?如果是那么不也同时带着CPU状态的切换了么?如果不是怎么保证进程可以不断运行的?
使用轮转法,ABCD四个进程,在同一时间提交,执行时间为10s/6s/4s/8s,时间片长度为2s
![图片说明](https://img-ask.csdn.net/upload/201903/04/1551690533_646333.jpg) 是这样计算出完成时间吗,然后平均是除进程数,除4?新手再次谢过
请问:U-boot可以设置多张开机图片,并能够轮转显示吗?如何做?
请问:U-boot可以设置多张开机图片,并能够轮转显示吗?如何做?
C 程序没报错,就是调试的时候出现了中断,还请帮忙改正一下
#include <cstdlib> #include <iostream> #include<iomanip> using namespace std; struct A{ //先来先服务算法从这里开始 char name[10]; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; float avzztime; float avdqzztime; float lefttime; float stoptime; int timeprice; }; //定义一个结构体,里面包含的有一个进程相关的信息 A a[100]; //先来先服务算法从这里开始 void input(A *p, int N) { int i; cout << endl; printf(" 请您输入进程的 名字 到达时间 服务时间: (例如: a 0 100)\n\n"); for (i = 0; i <= N - 1; i++) { printf(" 请您输入进程%d的信息:\t", i + 1); scanf_s("\t\t\t%s%f%f", &p[i].name, &p[i].arrivetime, &p[i].servicetime); } } void Print(A *p, float arrivetime, float servicetime, float starttime, float finishtime, float zztime, float dqzztime, int N) { int k; cout << endl; printf("\n 具体进程调度信息:\n\n"); printf("\t进程名 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间\n"); for (k = 0; k <= N - 1; k++) { printf("\t%s\t%-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\t %-.2f\n", p[k].name, p[k].arrivetime, p[k].servicetime, p[k].starttime, p[k].finishtime, p[k].zztime, p[k].dqzztime); } getchar(); } void sort(A *p, int N) //到达时间排序 { for (int i = 0; i <= N - 1; i++) for (int j = 0; j <= i; j++) if (p[i].arrivetime<p[j].arrivetime) { A temp; temp = p[i]; p[i] = p[j]; p[j] = temp; } } void deal(A *p, float arrivetime, float servicetime, float starttime, float finishtime, float &zztime, float &dqzztime,/*float &avzztime,float &avdqzztime,*/int N) //运行阶段 { int k; for (k = 0; k <= N - 1; k++) { if (k == 0) { p[k].starttime = p[k].arrivetime; p[k].finishtime = p[k].arrivetime + p[k].servicetime; } else { p[k].starttime = p[k - 1].finishtime; p[k].finishtime = p[k - 1].finishtime + p[k].servicetime; } } for (k = 0; k <= N - 1; k++) { p[k].zztime = p[k].finishtime - p[k].arrivetime; p[k].dqzztime = p[k].zztime / p[k].servicetime; } } void FCFS(A *p, int N) { float sumzztime = 0, sumdqzztime = 0, avzztime, avdqzztime; float arrivetime = 0, servicetime = 0, starttime = 0, finishtime = 0, zztime = 0, dqzztime = 0; sort(p, N); deal(p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, N); Print(p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, N); for (int k = 0; k <= N - 1; k++) { sumzztime = sumzztime + p[k].zztime; sumdqzztime = sumdqzztime + p[k].dqzztime; } avzztime = sumzztime / N; printf("\n该算法的平均周转时间为:%-.2f\t", avzztime); avdqzztime = sumdqzztime / N; printf("该算法的平均带权周转时间为:%-.2f\t\n\n", avdqzztime); getchar(); } //先来先服务算法到此结束 A a1[100]; void sort1(A *p, int N1)//到达时间排序 { for (int i = 0; i <= N1 - 1; i++) for (int j = 0; j <= i; j++) if (p[i].arrivetime<p[j].arrivetime) { A temp; temp = p[i]; p[i] = p[j]; p[j] = temp; } } void deal(A *p, float arrivetime, float servicetime, float starttime, float finishtime, int N1)//运行阶段 { int k; for (k = 0; k <= N1 - 1; k++) { if (k == 0) { p[k].starttime = p[k].arrivetime; p[k].finishtime = p[k].arrivetime + p[k].servicetime; }//float(p[k].servicetime)/60;} else { p[k].starttime = p[k - 1].finishtime; p[k].finishtime = p[k - 1].finishtime + p[k].servicetime; }//float(p[k].servicetime)/60;} } for (k = 0; k <= N1 - 1; k++) { p[k].zztime = p[k].finishtime - p[k].arrivetime; p[k].dqzztime = p[k].zztime / p[k].servicetime; } } A a2[100]; void ptt(A *p, float arrivetime, float servicetime, float starttime, float finishtime, float zztime, float dqzztime, float avzztime, float avdqzztime, float lefttime, int timeprice, int N2) { float w = 0; int c = 0; float stoptime = 0; printf("\n 请输入时间片的值:"); cin >> timeprice; sort(p, N2); float d[20], h[20]; for (int k = 0; k <= N2 - 1; k++) { d[k] = p[k].servicetime; if (k == 0) { p[k].starttime = p[k].arrivetime; p[k].finishtime = p[k].arrivetime + p[k].servicetime; } else { p[k].starttime = p[k - 1].finishtime; p[k].finishtime = p[k - 1].finishtime + p[k].servicetime; } h[k] = p[k].starttime; p[k].lefttime = p[k].servicetime - timeprice; if (p[k].lefttime>0) { c = c + 1; p[k].stoptime = p[k].starttime + timeprice; p[k].finishtime = p[k].stoptime; } else p[k].stoptime = p[k].finishtime; w = p[k].stoptime; } printf("\n 第1轮进程调度信息:\n\n"); printf("\t进程名 到达时间 服务时间 开始时间 停止时间 剩余时间\n"); for (int k = 0; k <= N2 - 1; k++) { printf("\t%s\t%-.2f\t %-.2f\t %-.2f\t\t %-.2f\t %-.2f\n", p[k].name, p[k].arrivetime, p[k].servicetime, p[k].starttime, p[k].stoptime, p[k].lefttime); } getchar(); int i = 2; while (c>0) { printf("\n 第 %d 轮具体进程调度信息(时间片为 %d ):\n\n", i, timeprice); printf("\t进程名 服务时间 开始时间 停止时间 剩余时间\n"); for (int k = 0; k <= N2 - 1; k++) { if (p[k].lefttime>0) { p[k].servicetime = p[k].lefttime; p[k].starttime = w; p[k].finishtime = p[k].starttime + p[k].servicetime; p[k].lefttime = p[k].servicetime - timeprice; if (p[k].lefttime>0)p[k].stoptime = p[k].starttime + timeprice; if (p[k].lefttime <= 0) { c = c - 1; p[k].stoptime = p[k].finishtime; } w = p[k].stoptime; printf("\t%s\t%-.2f\t %-.2f %-.2f %-.2f\n", p[k].name, p[k].servicetime, p[k].starttime, p[k].stoptime, p[k].lefttime); } } i = i + 1; } if (c <= 0) printf("\n 时间片轮转调度过程结束!\n"); for (int k = 0; k <= N2 - 1; k++) { p[k].servicetime = d[k]; p[k].starttime = h[k]; p[k].zztime = p[k].finishtime - p[k].arrivetime; p[k].dqzztime = p[k].zztime / p[k].servicetime; } getchar(); } void tt(A *p, int N2) { float sumzztime = 0, sumdqzztime = 0, avzztime = 0, avdqzztime = 0; int timeprice = 0; float arrivetime = 0, servicetime = 0, starttime = 0, finishtime = 0, zztime = 0, dqzztime = 0, lefttime = 0; ptt(p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, avzztime, avdqzztime, lefttime, timeprice, N2); printf("\n 综合信息为:\n"); Print(p, arrivetime, servicetime, starttime, finishtime, zztime, dqzztime, N2); for (int k = 0; k <= N2 - 1; k++) { sumzztime = sumzztime + p[k].zztime; sumdqzztime = sumdqzztime + p[k].dqzztime; } avzztime = sumzztime / N2; printf("\n该算法的平均周转时间为:%-.2f\t", avzztime); avdqzztime = sumdqzztime / N2; printf("该算法的平均带权周转时间为:%-.2f\t\n", avdqzztime); getchar(); } int main(int argc, char *argv[]) { int N; char cse1; cout << "\t" << "\t\t 1.先来先服务调度算法 " << "\t\t" << endl; cout << endl; cout << "\t" << "\t\t 2.时间片轮转调度算法" << "\t\t" << endl; cout << endl; printf("输入进程数目:"); scanf_s("%d", &N); input(a, N); while (1) { cout << "\t\t\t 请输入您的选择(1/2):"; cse1 = getchar(); switch (cse1) { case '1': //int N; cout << endl; cout << endl; printf("\t\t<<---!!!@@@先来先服务调度算法@@@!!!--->>\n"); cout << endl; //printf("输入进程数目:"); //scanf("%d",&N); //input(a,N); FCFS(a, N); break; case '2': //int N2; cout << endl; cout << endl; printf("\t\t<<---!!!@@@时间片轮转调度算法@@@!!!--->>\n"); cout << endl; //printf("输入进程数目: "); // scanf("%d",&N2); //input(a2,N2); tt(a, N); break; } } system("PAUSE"); return EXIT_SUCCESS; }
多线程间数据访问问题
若现开启三个串口 分别为三个线程不断接受数据 ``` void COM1() { while(1) { a1=recv1_1(); a2=recv1_2(); Sleep(5); } } void COM2() { while(1) { b1=recv2_1(); b2 = recv2_2(); Sleep(5); } } void COM3() { while(1) { c1=recv3_1(); c2 = recv3_2(); Sleep(5); } } ``` 主线程在某时刻需要使用该时刻的a1 a2 b1 b2 c1 c2 变量 ``` void main() { XXX } ``` 问:主线程使用以上几个变量的时候应注意什么才能保证几个变量是同一时刻的, (比如说主线程采集到a1,而时间片轮转到另一个线程,再采集a2的时候就是另一个时间的了),只需要对子线程的变量加临界区就行吗? 谢谢!
怎么加轮转图跳转链接啊,求大神,解答
<section class="focu ``` ```s scontainer2" ratio="0.56"> <div class="slide_01 swiper-wrapper"> <div class="mod_01 swiper-slide"><img src="{$GetTemplateDir}/static/index/images/banner1.jpg" /></div> <div class="mod_01 swiper-slide"><img src="{$GetTemplateDir}/static/index/images/banner2.jpg" /></div> <div class="mod_01 swiper-slide"><img src="{$GetTemplateDir}/static/index/images/banner3.jpg" /></div> </div> <div class="swiper-pagination swiper-pagination2"></div> </section>
我根据别人的代码写了自动轮转播放图片,但是image.filename的路径识别不了?
private void ChangeImage(Image img, int millisecondsTimeOut) { this.Invoke(new Action(() => { pictureBox1.Image = img; }) ); Thread.Sleep(millisecondsTimeOut); } private void button1_Click(object sender, EventArgs e) { } private void Form2_Load(object sender, EventArgs e) { th = new Thread ( delegate () { try { //3就是要循环轮数了 for (int i = 0; i < 10; i++) { //调用方法 //设置图片的位置和显示时间(1000 为1秒) ChangeImage(Image.FromFile(@"C:\Users\Administrator\Desktop\壁纸\2.jpg"), 1000); ChangeImage(Image.FromFile(@"C:\Users\Administrator\Desktop\壁纸\1.jpg"), 1000); } } catch { MessageBox.Show("错误!"); } } ); th.IsBackground = true; th.Start(); }
请大家帮帮忙,JS当中实现右侧图片轮转的时候左侧图片同步出现边框啊?
![图片说明](https://img-ask.csdn.net/upload/201608/20/1471685709_425387.png)
如何实现多个表特殊连接的映射问题?
某医院的一张轮转实习表,实习时间分大周期和小周期,大周期中有至少两个小周期划分;实习部门分大组和小组,大组只含一个部门,小组包含至少两个部门;实习学生根据实习大组和小组分为对应的大组和小组。实现实习学生根据大组和小组在每实习大周期轮转所有部门一次,小周期中也是一样。求数据表的建立?
跪求方法 viewpage和listview的问题
有个问题 viewpager作为可以下拉刷新listview的头文件,添加图片轮转后,向下滑动viewpager无法拉出listview的隐藏头,无法进行刷新,网上找个很多方法,都解决不了,求指导啊!!!
关于JVM与WIN32 API的问题
关于在WINDOWS环境下运行JAVA 我这么想的。JVM是基于WIN32 API来运作的。 比如申请空间。JVM会调用WIN32 API来申请空间。。 又比如创建线程。JVM也会调用WIN32 API来创建线程。。 所以在JAVA书在讲线程的时候。会提到线程的创建啊,时间片轮转啊,都要依赖系统来完成,在不同的系统下可能实现的不一样。 大概就是这个意思吧,原话记不住了。 按我的想法来说:JAVA的一切动作都是建立在WIN32 API上! 又比如 c语言的 申请内存函数:malloc 也是基于WIN32 API来的。无论谁申请了空间,在WINDOWS内核里都会记录在案。如果进程结束,就由WINDOWS内核收回内存,即使没有FREE也一样。 本人比较小白,操作系统学的不好。 敢问JAVAEYE上的大虾们。 是这样的么?
问各位大神一个多线程的问题
import java.util.Date; public class TimePrinter extends Thread{ String mizi; public TimePrinter(String name){ mizi=name; } public void run() { try { for (int i = 0; i < 32767; i++) { System.out.println(mizi+i); sleep(1); } } catch (Exception e) { // TODO: handle exception } } public static void main(String[] args) { TimePrinter tp1=new TimePrinter("线程111111111111 "); tp1.start(); TimePrinter tp2=new TimePrinter("线程222222222222 "); tp2.start(); } } 运行结果是 线程111111111111 0 线程222222222222 0 线程111111111111 1 线程222222222222 1 线程111111111111 2 线程222222222222 2 线程222222222222 3 线程111111111111 3 线程222222222222 4 线程111111111111 4 线程222222222222 5 线程111111111111 5 线程222222222222 6 线程1和线程2,有时是线程一先出现有时是线程二先出现,我不太明白这是单核的多线程的时间片轮转所以导致1,2线程出现的先后顺序随机么?我的电脑是i7正常来讲这些线程不是应该跑在两个核心里么,如果是跑在两个核心里,他们出现的先后顺序应该是什么样的呢,求各位大神指导啊
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
实战:如何通过python requests库写一个抓取小网站图片的小爬虫
有点爱好的你,偶尔应该会看点图片文字,最近小网站经常崩溃消失,不如想一个办法本地化吧,把小照片珍藏起来! 首先,准备一个珍藏的小网站,然后就可以开始啦! 第一步 我们先写一个获取网站的url的链接,因为url常常是由page或者,其他元素构成,我们就把他分离出来,我找到的网站主页下有图片区 图片区内有标题页,一个标题里有10张照片大概 所以步骤是: 第一步:进入图片区的标题页 def getH...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问