Contrôle de fonctionnement
C++ Builder XE4
Dans le dessin graphique, les anciennes données ne rentrent pas dans la zone de dessin et ne sont pas nécessaires, je voulais donc un processus pour supprimer les anciennes données.
Il est facile d'utiliser TList, etc., mais j'ai moi-même implémenté le même processus afin qu'il puisse être utilisé dans des projets C.
En tant que processus
--keepnum: nombre minimum de données que vous souhaitez conserver --margin: nombre de données pour permettre la marge
Lorsque le nombre de données atteint (keepnum + margin), la marge est supprimée. En faisant cela, l'intention est que le processus de suppression de données puisse être exécuté à certains intervalles sans l'exécuter à chaque fois que des données sont ajoutées.
Corps de traitement
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;
}
Fonction de test
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; //Évitement de l'avertissement "La valeur affectée à xxx n'est pas utilisée"
} else {
int nop554 = 1;
(void) nop554; //Évitement de l'avertissement "La valeur affectée à xxx n'est pas utilisée"
}
}
TG_graphData_t est une structure de données. Il utilise une variable membre appelée TDateTime, mais lorsqu'elle est utilisée en C, elle sera remplacée par le type de données intégré le cas échéant.
TimeGraph_SetEachData(dst, src->sampleDt, src->val, src->errStatus);
Définit les données après sampleDt dans la structure du pointeur dst. Ceci est fait pour éviter d'oublier d'attribuer certaines variables membres.
Il peut être préférable de reconsidérer un peu plus le nom de la variable.
Recommended Posts