Avatar billede bumle90 Nybegynder
25. februar 2004 - 15:58 Der er 11 kommentarer og
1 løsning

Brug af timer i ikke-grafisk applikation.

Jeg ville høre om nogle evt. kunne hjælpe mig med at lave en timer i en console-applikation.
Skal man også bare bruge den normale timer der, og is så fald hvordan, eller skal man bruge noget andet ?
Avatar billede bumle90 Nybegynder
25. februar 2004 - 17:42 #1
Og hvis nogle ellers ved hvordan man opretter et katalog i c++ kan de også score pointene der :)
Jeg har prøvet
CreateDirectoryEx
og
CreateFile
uden held nogle af stederne. Der kommer intet dir frem
Avatar billede bumle90 Nybegynder
25. februar 2004 - 18:00 #2
Har fundet ud af directory :)
Avatar billede jakobdo Ekspert
25. februar 2004 - 19:12 #3
Hvad vil du bruge en timer til?
Kan du ikke evt bruge sleep();
Avatar billede bumle90 Nybegynder
25. februar 2004 - 19:22 #4
Mmmm altså jeg skal bruge en timer fordi jeg skal køre en rutine med et bestemt tidsinterval.
sleep, virker den så den får main-tråden til at sove eller hvordan?
Avatar billede jakobdo Ekspert
25. februar 2004 - 19:23 #5
Ja, den får hovedprocessen til at sove indtil den skal lave noget imens...
Avatar billede bertelbrander Novice
25. februar 2004 - 20:02 #6
Det er lidt bøvlet.
Så vidt jeg ved skal du lave en message loop med GetMessage(...) osv. for at kunne bruge timere.
Det er måske lige så let at lave det i en seperat tråd.

Jeg vil overveje at lave et eksempel senere på aftenen.
Avatar billede bertelbrander Novice
25. februar 2004 - 21:57 #7
En mulig løsning:

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

volatile int Counter;

VOID CALLBACK MyTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
  std::cout << "Hej " << Counter << std::endl;
  Counter++;
}

int main(void)
{
  UINT_PTR t = SetTimer(0, 0, 1000, MyTimerProc);
  do
  {
    MSG msg;
    GetMessage(&msg, NULL, 0, 0xFFFF);
    DispatchMessage(&msg);
  }
  while(Counter < 10);
  KillTimer(0, t);
  return 0;
}

Afhænging af hvad du skal bruge det til kan du kombinere med: PeekConsoleInput() og/eller PeekMessage(), eller en ny tråd til at lave det grove...
Avatar billede bumle90 Nybegynder
26. februar 2004 - 07:16 #8
lækkert :)
Du må gerne lægge svar mester
Avatar billede narrr Nybegynder
26. februar 2004 - 08:17 #9
Hey bertelbrander, jeg har hørt at han bruger volatile hvis man vil angive at en variabel kan ændre sig når som helst.. ER det rigtigt?
Avatar billede jpk Nybegynder
27. februar 2004 - 09:10 #10
narrr >> det er ikke så meget det at den kan ændres når som helst, men hvis det sker fra forskellige tråde.
variablen bliver læst/skrevet hver gang den bruges/ændres.

Forestil dig to tråde:

#1: Sæt m_vbRun = true
#1: Start tråd #2
#1: Vent indtil m_bRun = false
#2: Kør indtil job er færdigt
#2: Sæt m_vbRun = false

Hvis m_vbRun ikke er erklæret volatile, vil tråd #1 måske aldrig opdage at tråd #2 er færdig, da variablen ikke genlæses.
Avatar billede bertelbrander Novice
06. marts 2004 - 22:23 #11
Har været på ski-ferie...

Jeg forsøger at undgå point.
Avatar billede bumle90 Nybegynder
24. august 2004 - 18:02 #12
Undskyld den bratte afslutning, men jeg har lidt for mange løse ender...Blir nødt til at lukke for nogle af alle mine spg.
Tak for hjællpen. Hvis der er lagt svar får disse point, eller er jeg nødt til at tage dem selv for at lukke alle de her spg.
Mvh.
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