Pregunta

Estamos utilizando C para construir un sistema en el núcleo del brazo (es decir, un sistema integrado). La pregunta es: ¿Cómo podemos evitar el problema de reingreso de manera formal para que estemos seguros de que se eliminan todos los errores de reingreso? Puede que este no sea un deseo práctico pero seguramente importante para cualquier sistema, supongo.

Solo para la discusión, supongo que dibujar el diagrama UML o tener una máquina de estado completa sería un buen comienzo (pero ¿cómo generarlo después de que se desarrolle todo el sistema?). ¿Alguna sugerencia sobre cómo usar el diagrama State Machine / UML para hacer el análisis?

¿Fue útil?

Solución

Como se mencionó en @alExander, el WebPart aún permanece en la Galería WebPart.Deberá escribir el código en el evento FeelDeFeactiving, lo que buscará su página web en la Galería WebPart y eliminarla desde allí.Follwoing es el código de muestra que debe escribirse en el evento:

int itemToDelete = 0;
SPList list = parentSite.GetCatalog(SPListTemplateType.WebPartCatalog);
foreach (SPListItem item in list.Items)
{
    if (item["Web Part"].ToString().ToLower() == "name.webpart")
    {
        itemToDelete = item.ID;
        break;
    }
}
if (itemToDelete > 0)
{               
    SPListItem item = list.GetItemById(itemToDelete);
    item.Delete();
}
list.Update();

Otros consejos

Corrección rápida, si sospecha algo:

int some_func(int x, int y)
{
    static volatile int do_not_enter_twice = 0;
    assert(!(do_not_enter_twice++));

    /* some_func continued */

    do_not_enter_twice--;
    return whatever;
}

Respuesta más larga:
Use una herramienta para hacer un gráfico de llamadas y continúa manualmente desde allí.

Una herramienta que puede calcular enorme Llame Graphs es el Kit de herramientas de reingeniería de software DMS y su parte delantera C. La parte delantera C se usa para analizar el código C; DMS tiene maquinaria integrada para calcular el control y el análisis de flujo de datos, el análisis de puntos y extraer hechos directos de llamadas e indirectos-indirectos

DMS se ha utilizado para crear gráficos de llamadas para los sistemas de código fuente C de 35 millones líneas de código C (= 250,000 funciones), y luego extraer información de ese gráfico de llamadas. Una cuestión clave al construir gráficos grandes como este es calcular los puntos hasta la información con tanta precisión como práctica (existen limitaciones de teoría difíciles para hacerlo perfectamente) para que las llamadas de la función indirecta estén dirigidas de manera conservadora a un número mínimo de objetivos falsos positivos.

En su caso, la información para extraer es, como indican otros autores, "¿Hay un ciclo?" En este gráfico de llamadas.

A esta escala, no desea hacer esto a mano, y debe volver a hacerlo cada vez que se prepare para una construcción de producción. Entonces, mecanizar el cheque tendría mucho sentido.

Esto genera la salida que busca con sus datos de ejemplo.

Option Explicit
Sub GenerateCalendar()

  Dim DateCrnt As Date
  Dim DayOfWeekCrnt As Long
  Dim HoursToPlace As Long
  Dim RowDestCrnt As Long
  Dim RowSrcCrnt As Long
  Dim RowSrcLast As Long
  Dim SrcWork() As Variant

  ' Assume source data starts in row 2 of columns A and B of Worksheet Calendar 1
  With Worksheets("Calendar 1")
    ' Find last used row in column A
    RowSrcLast = .Cells(Rows.Count, "A").End(xlUp).Row
    SrcWork = .Range(.Cells(2, "A"), .Cells(RowSrcLast, "B")).Value
  End With

  ' SrcWork is now a 2D array containing the data from Calendar1.
  ' Dimension 1 holds the rows.  Dimension 2 holds to columns.

  ' Initialise control variable for SrcWork
  RowSrcCrnt = 1
  DateCrnt = SrcWork(RowSrcCrnt, 1)
  HoursToPlace = SrcWork(RowSrcCrnt, 2)
  RowSrcCrnt = 2

  ' Assume output data is to be placed in in Worksheet Calendar 2 in columns
  ' A and B starting at row 2
  RowDestCrnt = 2

  With Worksheets("Calendar 2")
    Do While True
      ' DateCrnt identifies the next date to output.
      ' HoursToPlace identifies the unplaced hours
      With .Cells(RowDestCrnt, 1)
        .Value = DateCrnt
        .NumberFormat = "ddd d mmm yyy"
      End With
      If HoursToPlace > 8 Then
        .Cells(RowDestCrnt, 2).Value = 8
        HoursToPlace = HoursToPlace - 8
      Else
        .Cells(RowDestCrnt, 2).Value = HoursToPlace
        HoursToPlace = 0
      End If
      RowDestCrnt = RowDestCrnt + 1
      If HoursToPlace = 0 Then
        ' No more hours to place from last row of SrcWork
        If RowSrcCrnt > UBound(SrcWork, 1) Then
          ' There are no used rows in SrcWork.  Finished
          Exit Do
        End If
        ' Extract next row from source data.
        DateCrnt = SrcWork(RowSrcCrnt, 1)
        HoursToPlace = SrcWork(RowSrcCrnt, 2)
        RowSrcCrnt = RowSrcCrnt + 1
      Else
        ' More hours to place. Set DateCrnt to the next weekday.
        Do While True
          DateCrnt = DateAdd("d", 1, DateCrnt)   ' Add 1 day to DateCrnt
          DayOfWeekCrnt = Weekday(DateCrnt)
          If DayOfWeekCrnt >= vbMonday And DayOfWeekCrnt <= vbFriday Then
            ' Have week day
            Exit Do
          End If
        Loop
      End If
    Loop
  End With

End Sub

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top