Modification des valeurs de date et d’heure à l’aide de SYSTEMTIME, FILETIME et ULARGE_INTEGER

Je fais un programme, en C ++ utilisant Visual Studio 2005, qui doit créer un filigrane avec l’heure sur un ensemble d’images.

Ces images proviennent d’une vidéo qui a été traitée à certains intervalles de temps. Ce que j’essaie de faire est de modifier l’heure sur chaque image via SYSTEMTIME. J’ai regardé le MSDN et il est dit de ne pas modifier les valeurs dans SYSTEMTIME lui-même, mais de le convertir en FILETIME, puis en ULARGE_INTEGER. Ma question est la suivante: comment se divise l’ULARGE_INTEGER? Est-ce que la HighPart est la date et la partie basse du temps et si c’est le cas, comment puis-je prendre en compte le roulement? Comme si une image apparaissait à 23h58 le 25/02/2011 et se prolongeait jusqu’à 12h11 le 26/02/2011? L’ajout de la valeur spécifiée serait-il automatiquement pris en compte et affiché lorsque je le reconvertirais en une variable SYSTEMTIME?

Merci d’avance pour votre aide.

Ils suggèrent de convertir SYSTEMTIME en SYSTEMTIME , qui est un nombre de tics depuis une époque. Vous pouvez ensuite append le nombre requirejs de «ticks» (c.-à-d. Intervalles de 100 ns) pour indiquer votre heure et reconvertir en SYSTEMTIME .

La structure ULARGE_INTEGER est une union avec un membre QuadPart , qui est un numéro 64 bits, qui peut être directement ajouté (sur du matériel récent).

 SYSTEMTIME add( SYSTEMTIME s, double seconds ) { FILETIME f; SystemTimeToFileTime( &s, &f ); ULARGE_INTEGER u ; memcpy( &u , &f , sizeof( u ) ); const double c_dSecondsPer100nsInterval = 100.*1.e-9; const double c_dNumberOf100nsIntervals = seconds / c_dSecondsPer100nsInterval; // note: you may want to round the number of intervals. u.QuadPart += c_dNumberOf100nsIntervals; memcpy( &f, &u, sizeof( f ) ); FileTimeToSystemTime( &f, &s ); return s; }