2010-07-09 94 views

回答

0

你可以写一个Windows服务,如果你想使调度应用,任务,活动

+0

我不是说在特定时间间隔内运行任务,或者像这样......我只是在谈论项目计划应用程序的类型,其中任务可以根据其持续时间+依赖性进行计划。 – 2010-07-09 09:19:47

1

你说的是CPM - 关键路径法。

评估每个条件类型(Finish to Start,....)是一个简单的Select-Case。

你需要eval早日期然后日期。这决定了关键路径。

如果您的算法包括ASAP - ALAP对于某些任务,您可以评估预定日期aditional通过。

我对每个传递使用递归算法(Early Dates,Latest Dates ...)。这发现条件循环并显示它们(任务1 - >任务2 - >任务1)。

CPM最复杂的任务是日历管理。 Nothe该功能

Date1 = Calendar.Eval_DateFinish(Start, Duration) 

成为基于资源日历区间的功能。

这里是我的Ealy日期功能。

Private Sub cpm_fmte(ByVal n As Int32) 
    Dim a = Actividades(n), fi, f As FechaCpm, ncit As Integer = 0 
    fi.value = Integer.MinValue 
    Dim cal As Calend = a.Cal, dur As Integer = a.dur 
    sw(n) = 255 : RaBucle.Add(a) 'Marco la actividad para detectar bucle condicionantes 

    For Each c In a.Predecesoras '/* calcular predecesoras */         
     If c._Act >= nHitos Then 
      If c._Act < nTResumen Then Continue For 
      Select Case sw(c._Act) 
       Case 0 : cpm_fmte(c._Act) 
       Case 255 : ShowBucle(c._Act) : Throw New Exception("Cpm_ftme: Error - Bucle Condicionantes") 
       'case Else - 1 - Ya calculada anteriormente 
      End Select 
     End If 

     Dim Pred = Actividades(c._Act) 
     Select Case c.Tipo 
      Case "D"c : f.value = Pred.ffmte.value + c.Demora 
      Case "I"c : f.value = Pred.fimte.value + c.Demora : ncit += 1 
      Case "T"c : f = cal.Calc_Fi(Pred.ffmte + c.Demora, dur) : ncit += 1 
      Case Else : Throw New Exception(String.Format("Error condic.: {0} {1} {2} {3} {4}", _ 
           a.Id, c.Tipo, Pred.Id, c.Demora)) 
     End Select 
     If f > fi Then fi = f 
    Next 
    RaBucle.Count -= 1 

    If fi.value = Integer.MinValue Then fi = Proyecto.Actprj.FechaPrj 
    If dur > 0 Then fi = cal.Fecha_Jla_Av(fi) 
    a.fimte.value = fi.value : a.ffmte = cal.Calc_Ff(fi, dur) 
    a.Fip = a.fimte : a.Ffp = a.ffmte 
    If a.ffmte.value > Fmax.value Then mfmax.value = a.ffmte.value 
    If a.fimte.value < Fmin.value Then mFmin.value = a.fimte.value 

    sw(n) = 1 'Actividad calculada 
End Sub 

注意事项。 I'am Spanish then:

  • 已预览 - >早期日期(最新日期),Fmta - >最新日期,Fp - 已排序。
  • 网络连接 - >开始日期(出生日期INICIO),FF - >完成日期(出生日期FIN)
  • ACTIVIDADES - 任务
  • “d” C - >(完成 - 启动), “Después”
  • “I”c - >(Start - Start)“Inician ...”
  • “T”c - >(Finish - Finish)“Terminan ...”
  • 从未使用开始 - 结束条件。

我使用FechaCpm类型(结构),作为Int32类型(FechaCpm.Value)进行处理并将其解释为分钟时间间隔单位。

您可以在SourceForge上获得更多的CPM代码,但我从来没有在网上找到任何代码。 您可以看到“Open WorkBench” - Java或“Planner” - C++。

我的代码是基于CPM的,大多数Planification程序都是基于CPM的资源。 我只使用一种资源(人力资源),则日历是任务属性。