Avatar billede dmg Nybegynder
01. marts 2003 - 15:35 Der er 6 kommentarer og
2 løsninger

Skrive til logfil automatisk, hver 12 time

Hej gutter...

Jeg har lavet et program i en funktion:
(void fil ()
{
kode.. bla bla bla
}

Programmet laver en logfil og skriver dato'en ud som fil.

Dette skal ske hver 12 time... Er der nogen derved hvordan man laver en timer til et program??? Det må ikke optage for meget på cpu'en...

Tak fordi i gider hjælpe...
Avatar billede soreno Praktikant
01. marts 2003 - 15:39 #1
Du kunne gøre sådan (Windows only):

#include <windows.h>
..
while(betingelse er sand)
{
  udfør_arbejde();
  Sleep(4320000)
}

12 * 60 = 720 minutter
720 * 60 = 43200 sekunder
43200 * 100 = 4320000 millisekunder
Avatar billede Slettet bruger
01. marts 2003 - 15:44 #2
Hvis det er til Windows, vil jeg foreslå at du ser på SetTimer
Avatar billede soreno Praktikant
01. marts 2003 - 15:46 #3
Men hvis det eneste dit program skal gøre er dette:

#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  while(betingelse er sand)
  {
    skriv_til_log();
  }
  return 0;
}

Så vil jeg foretrække min løsning.

Er der derimod flere ting kunne du overveje at lave en tråd der udfører log funktionen.
Avatar billede soreno Praktikant
01. marts 2003 - 16:00 #4
Med en tråd ville det se sådan ud (stadig Windows):

#include <windows.h>
#include <iostream>

using namespace std;

DWORD logThreadID = 0;
DWORD WINAPI logThread(LPVOID lpParameter);

int main(int argc, char **argv)
{
    CreateThread(NULL, 0, logThread, (LPVOID)NULL, 0, &logThreadID); 
    for(int i=0;i<20;i++)
    {
        cout << "[" << i << "] - Hello World from mainThread" << endl;
        Sleep(400);
    }
    return 0;
}

DWORD WINAPI logThread(LPVOID lpParameter)
{
    for(int i=0;i<20;i++)
    {
        cout << "\t[" << i << "] - Hello World from logThread" << endl;
        Sleep(300);
    }
    return 0;
}

Så er det bare at tilpasse loops og sleeps :-)
Avatar billede dmg Nybegynder
03. marts 2003 - 10:43 #5
Hej igen... Mange tak for jeres hjælp med dovers koder ;)

Jeg har også prøvet dem, men er ikke go nok til selv at tilpasse dem?

Som jeg prøver at lave det:

jeg har lavet en variabel der hedder timer, som udføre kommandoen: dato.da_day

Jeg har her skrevet:

if (timer = 0000); // altså midnat
{
må den gerne køre scriptet // hvad skal jeg skrive her???
}

Kan man ik gøre sådan?

det laver programmet fint, hvis jeg ik skriver noget imellem {} så variablen virker fint...
Avatar billede soreno Praktikant
03. marts 2003 - 10:57 #6
Nu var det godt nok ikke mig der nævnte timers, men mon ikke der menes en af disse:
http://www.winprog.org/tutorial/animation.html

(Hele tutorialen findes her: http://www.winprog.org/tutorial/ )

Jeg synes det er lidt overkill med sådan en timer (derfor lavede jeg tråd eksemplet).
Avatar billede Slettet bruger
03. marts 2003 - 12:32 #7
her er et eksempel på hvordan du kan bruge SetTimer:

#include <windows.h>
#include <stdio.h>
#include <conio.h>

const SECONDS = 1000;
const MINUTES = 60*SECONDS;
const HOURS = 60*MINUTES;

void CALLBACK WriteLog(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime) 
{
    printf("Write to log\n");
}


int main()
{
    MSG msg;
    UINT timer = SetTimer(NULL, 1, 10*SECONDS, (TIMERPROC)WriteLog);
    while (!_kbhit())
    {
        if( GetMessage( &msg, NULL, 0, 0 ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
    }
    KillTimer(NULL, timer);
    return 0;
}
Her bliver WriteLog kaldt hvert tiende sekundt.

Som du kan se er der et messageloop (det er nødvendigt, og hvis du ikke har dette iforvejen vil jeg anbefale Sleep løsningen).
Hvis du har et messageloop kan du bruge den løsning der nu passer dig bedst, jeg mener ikke den ene er bedre end den anden.
Avatar billede dmg Nybegynder
17. marts 2003 - 09:31 #8
Meget meget, genialt, de koder i ellers har bikset sammen her :-)

Tak for jeres hjælp...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester