Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method AdjustWorkLoad ( 
 | 
  LibOpt_Task task, 
 | 
  Real timeA, 
 | 
  Real timeB, 
 | 
  Real timeC 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    timeA := timeA + 1; // avoid division by 0 
 | 
    timeB := timeB + 1;  
 | 
    timeC := timeC + 1;  
 | 
     
 | 
    s := timeA + timeB + timeC;  
 | 
     
 | 
    fracA := timeA / s;  
 | 
    fracB := timeB / s;  
 | 
    fracC := timeC / s;  
 | 
     
 | 
    // task.Log( 'FracA,B,C=' + [String] fracA + ', ' + [String] fracB + ', ' + [String] fracC );   
 | 
     
 | 
    sizeA := this.ThreadAParameter();  
 | 
    sizeB := this.ThreadBParameter() - this.ThreadAParameter();  
 | 
    sizeC := 1000 - this.ThreadBParameter();  
 | 
    N := sizeA + sizeB + sizeC;  
 | 
     
 | 
    factorA := fracA * 3;  
 | 
    factorB := fracB * 3;  
 | 
    factorC := fracC * 3;   
 | 
     
 | 
    // task.Log( 'FactorsA,B,C=' + [String] factorA + ', ' + [String] factorB + ', ' + [String] factorC );   
 | 
     
 | 
    newsizeA := sizeA / factorA;  
 | 
    newsizeB := sizeB / factorB;  
 | 
    newsizeC := sizeC / factorC;  
 | 
    total := maxvalue( 1.0, newsizeA + newsizeB + newsizeC );  
 | 
     
 | 
    // task.Log( 'NewsizeA,B,C=' + [String] newsizeA + ', ' + [String] newsizeB + ', ' + [String] newsizeC );   
 | 
     
 | 
    newAratio := newsizeA / total;  
 | 
    newBratio := newsizeB / total;  
 | 
    // newCratio := newsizeC / total;  
 | 
     
 | 
    // task.Log( 'NewratioA,B,C=' + [String] newAratio + ', ' + [String] newBratio + ', ' + [String] newCratio );   
 | 
     
 | 
     
 | 
    newAparam := ceil( N * newAratio );  
 | 
    newBparam := newAparam + ceil( N * newBratio );  
 | 
     
 | 
    // task.Log( 'new A ' + [String] newAparam );  
 | 
    // task.Log( 'new B ' + [String] newBparam );  
 | 
     
 | 
    newAparam := maxvalue(  newAparam, 0 );  
 | 
    newBparam := maxvalue( newBparam, 0 );  
 | 
    newAparam := minvalue(  newAparam, 999 );  
 | 
    newBparam := minvalue( newBparam, 999 );  
 | 
     
 | 
    if ( newAparam > newBparam )  
 | 
    { 
 | 
      newAparam := newBparam;  
 | 
    } 
 | 
     
 | 
    this.ThreadAParameter( newAparam );  
 | 
    this.ThreadBParameter( newBparam ); 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |