一个操作系统任务调度程序,改成Applet,大部份已完成,只有这核心算法没Java化了
如果需完整版的话,请加我QQ:3242435void COsDesignDoc::OnProcessInfo( )
{
int x_CPU=0,x_DEV=0; int tCPU=0;
int tDEV=0;
int xCPU=0;
int xDEV=0;
m_ATotalTime=0;
m_BTotalTime=0;
m_CTotalTime=0;
while(m_process[0]||m_process[1]||m_process[2])
{
//////do check
if(m_process[0])
{
if(m_process[0]->m_Type==1)
{
tCPU=1;
xCPU=3;
}
else
{
tDEV=1;
xDEV=3;
}
}
if(m_process[1])
{
if(m_process[1]->m_Type==1)
{
if(tCPU==0) xCPU=2;
tCPU=1;
if(m_process[1]->m_Contiue==1) xCPU=2;
}
else
{
if(tDEV==0) xDEV=2;
tDEV=1;
if(m_process[1]->m_Contiue==1) xDEV=2;
}
}
if(m_process[2])
{
if(m_process[2]->m_Type==1)
{
if(tCPU==0) xCPU=1;
tCPU=1;
if(m_process[2]->m_Contiue==1) xCPU=1;
}
else
{
if(tDEV==0) xDEV=1;
tDEV=1;
if(m_process[2]->m_Contiue==1) xDEV=1;
}
}
///// do work
//confirm the node
if(tCPU==1 && tDEV==1)
{
COLORREF color1,color2;
NodeInfo *Temp1;
NodeInfo *Temp2;
switch( xCPU )
{
case 3:
Temp1=m_process[0];
m_process[0]=NULL;
color1=RGB(255,0,0);
break;
case 2:
Temp1=m_process[1];
m_process[1]=NULL;
color1=RGB(128,0,128);
break;
case 1:
Temp1=m_process[2];
m_process[2]=NULL;
color1=RGB(0,0,255);
break;
} switch( xDEV )
{
case 3:
Temp2=m_process[0];
m_process[0]=NULL;
color2=RGB(255,0,0);
break;
case 2:
Temp2=m_process[1];
m_process[1]=NULL;
color2=RGB(128,0,128);
break;
case 1:
Temp2=m_process[2];
m_process[2]=NULL;
color2=RGB(0,0,255);
break;
}
//////
if(Temp1->m_RunTime>Temp2->m_RunTime)
{
int temp;
NodeInfo *Temp;
Temp1->m_RunTime=Temp1->m_RunTime-Temp2->m_RunTime;
Temp1->m_Contiue=1;
temp=x_CPU;
x_CPU+=Temp2->m_RunTime;
x_DEV+=Temp2->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
Temp=Temp2;
Temp2=Temp2->Next;
delete Temp;
}
else
if(Temp1->m_RunTime<Temp2->m_RunTime)
{
int temp;
NodeInfo *Temp;
Temp2->m_RunTime=Temp2->m_RunTime-Temp1->m_RunTime;
Temp2->m_Contiue=1;
temp=x_CPU;
x_CPU+=Temp1->m_RunTime;
x_DEV+=Temp1->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
Temp=Temp1;
Temp1=Temp1->Next;
delete Temp;
}
else
{
int temp;
NodeInfo *old1;
NodeInfo *old2;
temp=x_CPU;
x_CPU+=Temp1->m_RunTime;
x_DEV+=Temp1->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
old1=Temp1;
old2=Temp2;
Temp1=Temp1->Next;
Temp2=Temp2->Next;
delete old1;
delete old2;
}
/////////
switch( xCPU )
{
case 3:
m_process[0]=Temp1;
if(!m_process[0]) m_ATotalTime=x_CPU;
break;
case 2:
m_process[1]=Temp1;
if(!m_process[1]) m_BTotalTime=x_CPU;
break;
case 1:
m_process[2]=Temp1;
if(!m_process[2]) m_CTotalTime=x_CPU;
break;
}
switch( xDEV )
{
case 3:
m_process[0]=Temp2;
if(!m_process[0]) m_ATotalTime=x_DEV;
break;
case 2:
m_process[1]=Temp2;
if(!m_process[1]) m_BTotalTime=x_DEV;
break;
case 1:
m_process[2]=Temp2;
if(!m_process[2]) m_CTotalTime=x_DEV;
break;
} }
else
{ if(m_process[0] )// red
{
if( m_process[0]->m_Type==1 && tCPU==1 && xCPU==3)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[0]->m_RunTime;
Temp=m_process[0];
m_process[0]=m_process[0]->Next;
if(!m_process[0]) m_ATotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,3,temp,x_CPU,RGB(255,0,0));
}
else
if( m_process[0]->m_Type==0 && tDEV==1 && xDEV==3)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[0]->m_RunTime;
Temp=m_process[0];
m_process[0]=m_process[0]->Next;
if(!m_process[0]) m_ATotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,3,temp,x_DEV,RGB(255,0,0));
}
}
if(m_process[1])// purple
{
if( m_process[1]->m_Type==1 && tCPU==1 && xCPU==2)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[1]->m_RunTime;
Temp=m_process[1];
m_process[1]=m_process[1]->Next;
if(!m_process[1]) m_BTotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,2,temp,x_CPU,RGB(128,0,128));
}
else
if( m_process[1]->m_Type==0 && tDEV==1 && xDEV==2)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[1]->m_RunTime;
Temp=m_process[1];
m_process[1]=m_process[1]->Next;
if(!m_process[1]) m_BTotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,2,temp,x_DEV,RGB(128,0,128));
}
}
if(m_process[2])//dark blue
{
if( m_process[2]->m_Type==1 && tCPU==1 && xCPU==1)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[2]->m_RunTime;
Temp=m_process[2];
m_process[2]=m_process[2]->Next;
if(!m_process[2]) m_CTotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,1,temp,x_CPU,RGB(0,0,255));
}
else
if( m_process[2]->m_Type==0 && tDEV==1 && xDEV==1)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[2]->m_RunTime;
Temp=m_process[2];
m_process[2]=m_process[2]->Next;
if(!m_process[2]) m_CTotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,1,temp,x_DEV,RGB(0,0,255));
}
}
}
xCPU=0;
xDEV=0;
tCPU=0;
tDEV=0;
x_CPU=(x_CPU>x_DEV ? x_CPU : x_DEV);
x_DEV=x_CPU; }
m_TotalTime=(x_CPU>x_DEV ? x_CPU : x_DEV);
}
如果需完整版的话,请加我QQ:3242435void COsDesignDoc::OnProcessInfo( )
{
int x_CPU=0,x_DEV=0; int tCPU=0;
int tDEV=0;
int xCPU=0;
int xDEV=0;
m_ATotalTime=0;
m_BTotalTime=0;
m_CTotalTime=0;
while(m_process[0]||m_process[1]||m_process[2])
{
//////do check
if(m_process[0])
{
if(m_process[0]->m_Type==1)
{
tCPU=1;
xCPU=3;
}
else
{
tDEV=1;
xDEV=3;
}
}
if(m_process[1])
{
if(m_process[1]->m_Type==1)
{
if(tCPU==0) xCPU=2;
tCPU=1;
if(m_process[1]->m_Contiue==1) xCPU=2;
}
else
{
if(tDEV==0) xDEV=2;
tDEV=1;
if(m_process[1]->m_Contiue==1) xDEV=2;
}
}
if(m_process[2])
{
if(m_process[2]->m_Type==1)
{
if(tCPU==0) xCPU=1;
tCPU=1;
if(m_process[2]->m_Contiue==1) xCPU=1;
}
else
{
if(tDEV==0) xDEV=1;
tDEV=1;
if(m_process[2]->m_Contiue==1) xDEV=1;
}
}
///// do work
//confirm the node
if(tCPU==1 && tDEV==1)
{
COLORREF color1,color2;
NodeInfo *Temp1;
NodeInfo *Temp2;
switch( xCPU )
{
case 3:
Temp1=m_process[0];
m_process[0]=NULL;
color1=RGB(255,0,0);
break;
case 2:
Temp1=m_process[1];
m_process[1]=NULL;
color1=RGB(128,0,128);
break;
case 1:
Temp1=m_process[2];
m_process[2]=NULL;
color1=RGB(0,0,255);
break;
} switch( xDEV )
{
case 3:
Temp2=m_process[0];
m_process[0]=NULL;
color2=RGB(255,0,0);
break;
case 2:
Temp2=m_process[1];
m_process[1]=NULL;
color2=RGB(128,0,128);
break;
case 1:
Temp2=m_process[2];
m_process[2]=NULL;
color2=RGB(0,0,255);
break;
}
//////
if(Temp1->m_RunTime>Temp2->m_RunTime)
{
int temp;
NodeInfo *Temp;
Temp1->m_RunTime=Temp1->m_RunTime-Temp2->m_RunTime;
Temp1->m_Contiue=1;
temp=x_CPU;
x_CPU+=Temp2->m_RunTime;
x_DEV+=Temp2->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
Temp=Temp2;
Temp2=Temp2->Next;
delete Temp;
}
else
if(Temp1->m_RunTime<Temp2->m_RunTime)
{
int temp;
NodeInfo *Temp;
Temp2->m_RunTime=Temp2->m_RunTime-Temp1->m_RunTime;
Temp2->m_Contiue=1;
temp=x_CPU;
x_CPU+=Temp1->m_RunTime;
x_DEV+=Temp1->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
Temp=Temp1;
Temp1=Temp1->Next;
delete Temp;
}
else
{
int temp;
NodeInfo *old1;
NodeInfo *old2;
temp=x_CPU;
x_CPU+=Temp1->m_RunTime;
x_DEV+=Temp1->m_RunTime;
OnSetInfo(1,xCPU,temp,x_CPU,color1);
OnSetInfo(0,xDEV,temp,x_DEV,color2);
old1=Temp1;
old2=Temp2;
Temp1=Temp1->Next;
Temp2=Temp2->Next;
delete old1;
delete old2;
}
/////////
switch( xCPU )
{
case 3:
m_process[0]=Temp1;
if(!m_process[0]) m_ATotalTime=x_CPU;
break;
case 2:
m_process[1]=Temp1;
if(!m_process[1]) m_BTotalTime=x_CPU;
break;
case 1:
m_process[2]=Temp1;
if(!m_process[2]) m_CTotalTime=x_CPU;
break;
}
switch( xDEV )
{
case 3:
m_process[0]=Temp2;
if(!m_process[0]) m_ATotalTime=x_DEV;
break;
case 2:
m_process[1]=Temp2;
if(!m_process[1]) m_BTotalTime=x_DEV;
break;
case 1:
m_process[2]=Temp2;
if(!m_process[2]) m_CTotalTime=x_DEV;
break;
} }
else
{ if(m_process[0] )// red
{
if( m_process[0]->m_Type==1 && tCPU==1 && xCPU==3)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[0]->m_RunTime;
Temp=m_process[0];
m_process[0]=m_process[0]->Next;
if(!m_process[0]) m_ATotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,3,temp,x_CPU,RGB(255,0,0));
}
else
if( m_process[0]->m_Type==0 && tDEV==1 && xDEV==3)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[0]->m_RunTime;
Temp=m_process[0];
m_process[0]=m_process[0]->Next;
if(!m_process[0]) m_ATotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,3,temp,x_DEV,RGB(255,0,0));
}
}
if(m_process[1])// purple
{
if( m_process[1]->m_Type==1 && tCPU==1 && xCPU==2)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[1]->m_RunTime;
Temp=m_process[1];
m_process[1]=m_process[1]->Next;
if(!m_process[1]) m_BTotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,2,temp,x_CPU,RGB(128,0,128));
}
else
if( m_process[1]->m_Type==0 && tDEV==1 && xDEV==2)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[1]->m_RunTime;
Temp=m_process[1];
m_process[1]=m_process[1]->Next;
if(!m_process[1]) m_BTotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,2,temp,x_DEV,RGB(128,0,128));
}
}
if(m_process[2])//dark blue
{
if( m_process[2]->m_Type==1 && tCPU==1 && xCPU==1)
{
int temp=x_CPU;
NodeInfo *Temp;
x_CPU+=m_process[2]->m_RunTime;
Temp=m_process[2];
m_process[2]=m_process[2]->Next;
if(!m_process[2]) m_CTotalTime=x_CPU;
tCPU=0;
delete Temp;
OnSetInfo(1,1,temp,x_CPU,RGB(0,0,255));
}
else
if( m_process[2]->m_Type==0 && tDEV==1 && xDEV==1)
{
int temp=x_DEV;
NodeInfo *Temp;
x_DEV+=m_process[2]->m_RunTime;
Temp=m_process[2];
m_process[2]=m_process[2]->Next;
if(!m_process[2]) m_CTotalTime=x_DEV;
tDEV=0;
delete Temp;
OnSetInfo(0,1,temp,x_DEV,RGB(0,0,255));
}
}
}
xCPU=0;
xDEV=0;
tCPU=0;
tDEV=0;
x_CPU=(x_CPU>x_DEV ? x_CPU : x_DEV);
x_DEV=x_CPU; }
m_TotalTime=(x_CPU>x_DEV ? x_CPU : x_DEV);
}
class NodeInfo {
public int m_Type;
public int m_Contiue;
public int m_RunTime;
public NodeInfo Next;
} class COLORREF {
// to do
} void OnSetInfo(int x, int cpu, int i, int x_cpu, COLORREF c) {
// to do
} public COLORREF RGB(int r, int g, int b) {
// to do
return null;
} NodeInfo[] m_process;
int m_TotalTime, m_ATotalTime, m_BTotalTime, m_CTotalTime;
void OnProcessInfo() {
int x_CPU = 0, x_DEV = 0; int tCPU = 0;
int tDEV = 0;
int xCPU = 0;
int xDEV = 0;
m_ATotalTime = 0;
m_BTotalTime = 0;
m_CTotalTime = 0;
while (m_process[0] != null || m_process[1] != null || m_process[2] != null) {
//////do check
if (m_process[0] != null) {
if (m_process[0].m_Type == 1) {
tCPU = 1;
xCPU = 3;
}
else {
tDEV = 1;
xDEV = 3;
}
}
if (m_process[1] != null) {
if (m_process[1].m_Type == 1) {
if (tCPU == 0)
xCPU = 2;
tCPU = 1;
if (m_process[1].m_Contiue == 1)
xCPU = 2;
}
else {
if (tDEV == 0)
xDEV = 2;
tDEV = 1;
if (m_process[1].m_Contiue == 1)
xDEV = 2;
}
}
if (m_process[2] != null) {
if (m_process[2].m_Type == 1) {
if (tCPU == 0)
xCPU = 1;
tCPU = 1;
if (m_process[2].m_Contiue == 1)
xCPU = 1;
}
else {
if (tDEV == 0)
xDEV = 1;
tDEV = 1;
if (m_process[2].m_Contiue == 1)
xDEV = 1;
}
}
///// do work
//confirm the node
if (tCPU == 1 && tDEV == 1) {
COLORREF color1 = null, color2 = null;
NodeInfo Temp1 = null;
NodeInfo Temp2 = null;
switch (xCPU) {
case 3:
Temp1 = m_process[0];
m_process[0] = null;
color1 = RGB(255, 0, 0);
break;
case 2:
Temp1 = m_process[1];
m_process[1] = null;
color1 = RGB(128, 0, 128);
break;
case 1:
Temp1 = m_process[2];
m_process[2] = null;
color1 = RGB(0, 0, 255);
break;
} switch (xDEV) {
case 3:
Temp2 = m_process[0];
m_process[0] = null;
color2 = RGB(255, 0, 0);
break;
case 2:
Temp2 = m_process[1];
m_process[1] = null;
color2 = RGB(128, 0, 128);
break;
case 1:
Temp2 = m_process[2];
m_process[2] = null;
color2 = RGB(0, 0, 255);
break;
}
//////
if (Temp1.m_RunTime > Temp2.m_RunTime) {
int temp;
NodeInfo Temp;
Temp1.m_RunTime = Temp1.m_RunTime - Temp2.m_RunTime;
Temp1.m_Contiue = 1;
temp = x_CPU;
x_CPU += Temp2.m_RunTime;
x_DEV += Temp2.m_RunTime;
OnSetInfo(1, xCPU, temp, x_CPU, color1);
OnSetInfo(0, xDEV, temp, x_DEV, color2);
Temp = Temp2;
Temp2 = Temp2.Next;
Temp = null;
}
else
if (Temp1.m_RunTime < Temp2.m_RunTime) {
int temp;
NodeInfo Temp;
Temp2.m_RunTime = Temp2.m_RunTime - Temp1.m_RunTime;
Temp2.m_Contiue = 1;
temp = x_CPU;
x_CPU += Temp1.m_RunTime;
x_DEV += Temp1.m_RunTime;
OnSetInfo(1, xCPU, temp, x_CPU, color1);
OnSetInfo(0, xDEV, temp, x_DEV, color2);
Temp = Temp1;
Temp1 = Temp1.Next;
Temp = null;
}
else {
int temp;
NodeInfo old1;
NodeInfo old2;
temp = x_CPU;
x_CPU += Temp1.m_RunTime;
x_DEV += Temp1.m_RunTime;
OnSetInfo(1, xCPU, temp, x_CPU, color1);
OnSetInfo(0, xDEV, temp, x_DEV, color2);
old1 = Temp1;
old2 = Temp2;
Temp1 = Temp1.Next;
Temp2 = Temp2.Next;
old1 = null;
old2 = null;
}
/////////
switch (xCPU) {
case 3:
m_process[0] = Temp1;
if (m_process[0] == null)
m_ATotalTime = x_CPU;
break;
case 2:
m_process[1] = Temp1;
if (m_process[1] == null)
m_BTotalTime = x_CPU;
break;
case 1:
m_process[2] = Temp1;
if (m_process[2] == null)
m_CTotalTime = x_CPU;
break;
}
switch (xDEV) {
case 3:
m_process[0] = Temp2;
if (m_process[0] == null)
m_ATotalTime = x_DEV;
break;
case 2:
m_process[1] = Temp2;
if (m_process[1] == null)
m_BTotalTime = x_DEV;
break;
case 1:
m_process[2] = Temp2;
if (m_process[2] == null)
m_CTotalTime = x_DEV;
break;
} }
else { if (m_process[0] != null) { // red
if (m_process[0].m_Type == 1 && tCPU == 1 && xCPU == 3) {
int temp = x_CPU;
NodeInfo Temp;
x_CPU += m_process[0].m_RunTime;
Temp = m_process[0];
m_process[0] = m_process[0].Next;
if (m_process[0] == null)
m_ATotalTime = x_CPU;
tCPU = 0;
Temp = null;
OnSetInfo(1, 3, temp, x_CPU, RGB(255, 0, 0));
}
else
if (m_process[0].m_Type == 0 && tDEV == 1 && xDEV == 3) {
int temp = x_DEV;
NodeInfo Temp;
x_DEV += m_process[0].m_RunTime;
Temp = m_process[0];
m_process[0] = m_process[0].Next;
if (m_process[0] == null)
m_ATotalTime = x_DEV;
tDEV = 0;
Temp = null;
OnSetInfo(0, 3, temp, x_DEV, RGB(255, 0, 0));
}
}
if (m_process[1] != null) { // purple
if (m_process[1].m_Type == 1 && tCPU == 1 && xCPU == 2) {
int temp = x_CPU;
NodeInfo Temp;
x_CPU += m_process[1].m_RunTime;
Temp = m_process[1];
m_process[1] = m_process[1].Next;
if (m_process[1] == null)
m_BTotalTime = x_CPU;
tCPU = 0;
Temp = null;
OnSetInfo(1, 2, temp, x_CPU, RGB(128, 0, 128));
}
else
if (m_process[1].m_Type == 0 && tDEV == 1 && xDEV == 2) {
int temp = x_DEV;
NodeInfo Temp;
x_DEV += m_process[1].m_RunTime;
Temp = m_process[1];
m_process[1] = m_process[1].Next;
if (m_process[1] == null)
m_BTotalTime = x_DEV;
tDEV = 0;
Temp = null;
OnSetInfo(0, 2, temp, x_DEV, RGB(128, 0, 128));
}
}
if (m_process[2] != null) { //dark blue
if (m_process[2].m_Type == 1 && tCPU == 1 && xCPU == 1) {
int temp = x_CPU;
NodeInfo Temp;
x_CPU += m_process[2].m_RunTime;
Temp = m_process[2];
m_process[2] = m_process[2].Next;
if (m_process[2] == null)
m_CTotalTime = x_CPU;
tCPU = 0;
Temp = null;
OnSetInfo(1, 1, temp, x_CPU, RGB(0, 0, 255));
}
else
if (m_process[2].m_Type == 0 && tDEV == 1 && xDEV == 1) {
int temp = x_DEV;
NodeInfo Temp;
x_DEV += m_process[2].m_RunTime;
Temp = m_process[2];
m_process[2] = m_process[2].Next;
if (m_process[2] == null)
m_CTotalTime = x_DEV;
tDEV = 0;
Temp = null;
OnSetInfo(0, 1, temp, x_DEV, RGB(0, 0, 255));
}
}
}
xCPU = 0;
xDEV = 0;
tCPU = 0;
tDEV = 0;
x_CPU = (x_CPU > x_DEV ? x_CPU : x_DEV);
x_DEV = x_CPU; }
m_TotalTime = (x_CPU > x_DEV ? x_CPU : x_DEV);
}
}
helpall()比较牛。
楼上helpall()写的不错!看来helpall()很勤劳啊!我很懒的!
我QQ:3242425
msn:[email protected]
有没有可能写一个"完美转换程序"来把c++程序代码自动转换为java代码哦
现在好像问题不多了,那个帮忙看看,谢谢!
源码在这里下载。。里面有C++版。java是我自己写的有一点问题。。望大家看一下。哪里出了问题~
我的意思是想用java applet实现那个C++程序的功能。。我理解了这个C++的功能和一些功能。。
我写了这个java可是好像功能没有到位。而且,而且好像有一点异常。。希望你先看一下那个C++的程序。再看一下我这个java版的。帮我改正一下。。
我刚学java这个东西已经弄了一个星期了。谢谢