| 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' } | 
| } |