一个操作系统任务调度程序,改成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);
}

解决方案 »

  1.   

    class CppToJava{
      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;
            }
      

  2.   

    //continu...
            //////
            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);
      }
    }
      

  3.   

    ^_^!!!!!
     helpall()比较牛。
      

  4.   

    呵呵!有思路,可是不敢写,太多了!
    楼上helpall()写的不错!看来helpall()很勤劳啊!我很懒的!
      

  5.   

    我调试了下,好像还是有问题,能帮我调试下吗,我有完整的C++源码
    我QQ:3242425
    msn:[email protected]
      

  6.   

    HelpAll  不错哇~~挺有雷锋精神D~顶你...
      

  7.   

    晕,看都没有看完就吓到了.
    有没有可能写一个"完美转换程序"来把c++程序代码自动转换为java代码哦
      

  8.   

    http://www.nfdx.org/blog/attachments/month_200504/29_175117_kh0nsrc.rar
    现在好像问题不多了,那个帮忙看看,谢谢!
      

  9.   

    http://www.nfdx.org/blog/attachments/month_200504/29_175117_kh0nsrc.rar
    源码在这里下载。。里面有C++版。java是我自己写的有一点问题。。望大家看一下。哪里出了问题~
      

  10.   

    是的哦。helpall老大。看一下。那个java的哪里有问题。。3Q
      

  11.   

    没有啊?我把那个C++的调度程序改成java版的。。就有一些细节问题。。所以想请高手帮忙看一下。
      

  12.   

    to helpall:
    我的意思是想用java applet实现那个C++程序的功能。。我理解了这个C++的功能和一些功能。。
    我写了这个java可是好像功能没有到位。而且,而且好像有一点异常。。希望你先看一下那个C++的程序。再看一下我这个java版的。帮我改正一下。。
    我刚学java这个东西已经弄了一个星期了。谢谢
      

  13.   

    Sorry, I never use QQ or MSN.For this topic, I really don't have time to dig into the logics in your program. If you have specific exceptions or questions, you can post your question here. Some gurus might be interested in helping you too if your questions are interesting enough to attract them. :-)