Funktionsprüfung
C++ Builder XE4
Beim Zeichnen von Grafiken passen alte Daten nicht in den Zeichenbereich und sind nicht erforderlich. Daher wollte ich einen Prozess zum Löschen der alten Daten.
Es ist einfach, TList usw. zu verwenden, aber ich habe den gleichen Prozess selbst implementiert, damit er in C-Projekten verwendet werden kann.
Als Prozess
--keepnum: Mindestanzahl von Daten, die Sie behalten möchten --margin: Anzahl der Daten, um die Margin zuzulassen
Wenn die Anzahl der Daten erreicht ist (Keepnum + Rand), wird der Rand entfernt. Auf diese Weise soll der Prozess des Entfernens von Daten in bestimmten Intervallen ausgeführt werden, ohne sie jedes Mal auszuführen, wenn Daten hinzugefügt werden.
Verarbeitungskörper
int TimeGraph_KeepLatestNsets(int keepnum, int margin, TG_graphData_t *graphDataPtr, int *dataCount)
{
if (*dataCount < (keepnum + margin) ) {
return *dataCount;
}
for(int idx = 0; idx < keepnum; idx++) {
TG_graphData_t *src = &graphDataPtr[idx + margin];
TG_graphData_t *dst = &graphDataPtr[idx];
TimeGraph_SetEachData(dst, src->sampleDt, src->val, src->errStatus);
// set 0 to moved one
TimeGraph_SetEachData(src, src->sampleDt, 0.0, src->errStatus);
}
*dataCount = keepnum;
return *dataCount;
}
Testfunktion
void Test_TimeGraph_KeepLatestNsets()
{
TG_graphData_t data[10];
int dataCnt = 0;
const int keepnum= 5;
const int margin = 3;
for(int idx = 0; idx < (keepnum + margin); idx++) {
if (idx < keepnum) {
TimeGraph_SetEachData(&data[idx], Now(), 3.141592, TG_DATA_OK);
} else {
TimeGraph_SetEachData(&data[idx], Now(), 2.7182, TG_DATA_OK);
}
dataCnt++;
}
int preCnt = dataCnt;
int nowCnt = TimeGraph_KeepLatestNsets(keepnum, margin, &data[0], &dataCnt);
if (preCnt != nowCnt) {
// after removal of old data
int nop551 = 1;
(void) nop551; //Vermeidung von Warnungen "Der xxx zugewiesene Wert wird nicht verwendet"
} else {
int nop554 = 1;
(void) nop554; //Vermeidung von Warnungen "Der xxx zugewiesene Wert wird nicht verwendet"
}
}
TG_graphData_t ist eine Struktur für Daten. Es wird eine Mitgliedsvariable namens TDateTime verwendet. Wenn sie jedoch in C verwendet wird, wird sie entsprechend in den integrierten Datentyp geändert.
TimeGraph_SetEachData(dst, src->sampleDt, src->val, src->errStatus);
Legt die Daten nach sampleDt in der Struktur des dst-Zeigers fest. Dies geschieht, um zu verhindern, dass vergessen wird, einige Mitgliedsvariablen zuzuweisen.
Es ist möglicherweise besser, den Namen der Variablen etwas genauer zu überdenken.
Recommended Posts