Jeg har startet på å utvikle en applikasjon som skal brukes til loggføring, men under planleggingsfasen har jeg støtt på et problem med timing. Applikasjonen består hovedsakelig av en MySQL/MariaDB motor, 2 socket tilkobinger til 2 maskiner på samme lokale nettverket og en kode som skal kjøres hvert sekund.
Problemet er at koden som skal kjøres hvert sekund kan variere i kjøretid. Jeg har skrevet en lignende testkode, å kjørt den i loop for å måle tiden hver loop bruker, kjøretiden varierer mellom 200-700ms. Hvis jeg bruker sleep ( 800 ) så vil kjøretiden være mellom 1 sekund og 1,5 sekund og det er altfor upresist. Jeg trenger å kjøre denne koden med en nøyaktighet på 1000 ms.
Jeg har pønsket ut noen alternativer.
1. Lagre starttid og måle tiden koden bruker på å kjøre for så å subtraktere den fra det sekundet den skal bruke. Men jeg er bekymret for at koden kan bruke over 1 sekund på å kjøre hvis det er mye load på maskinen koden skal kjøre på, eller på nettverket.
2. Bruke cron job i operativ systemet (Debian) for å starte koden med et interval på 1 sekund. Men dette vil føre til unødvendig mye ressursbruk med tanke på at koden da må opprette både MySQL/MariaDB og socket tilkoblingene på nytt hver gang den starter.
3. Starte en ny thread hvert sekund, der koden kjørers også terminere thread'en når koden er ferdig, dette tror jeg er det beste alternativet da man kan bruke eksisterende tilkoblinger og man trenger ikkje å bekymre seg over at koden bruker mer enn 1 sekund å kjøre.
Kom gjerne med deres tanker eller ideer rundt dette. Og finnes det noen library i C++ som gjør det mulig å starte en funksjon/metode med et gitt interval? Jo mer nøyaktig timingen er jo bedre er det.
Problemet er at koden som skal kjøres hvert sekund kan variere i kjøretid. Jeg har skrevet en lignende testkode, å kjørt den i loop for å måle tiden hver loop bruker, kjøretiden varierer mellom 200-700ms. Hvis jeg bruker sleep ( 800 ) så vil kjøretiden være mellom 1 sekund og 1,5 sekund og det er altfor upresist. Jeg trenger å kjøre denne koden med en nøyaktighet på 1000 ms.
Jeg har pønsket ut noen alternativer.
1. Lagre starttid og måle tiden koden bruker på å kjøre for så å subtraktere den fra det sekundet den skal bruke. Men jeg er bekymret for at koden kan bruke over 1 sekund på å kjøre hvis det er mye load på maskinen koden skal kjøre på, eller på nettverket.
2. Bruke cron job i operativ systemet (Debian) for å starte koden med et interval på 1 sekund. Men dette vil føre til unødvendig mye ressursbruk med tanke på at koden da må opprette både MySQL/MariaDB og socket tilkoblingene på nytt hver gang den starter.
3. Starte en ny thread hvert sekund, der koden kjørers også terminere thread'en når koden er ferdig, dette tror jeg er det beste alternativet da man kan bruke eksisterende tilkoblinger og man trenger ikkje å bekymre seg over at koden bruker mer enn 1 sekund å kjøre.
Kom gjerne med deres tanker eller ideer rundt dette. Og finnes det noen library i C++ som gjør det mulig å starte en funksjon/metode med et gitt interval? Jo mer nøyaktig timingen er jo bedre er det.