Ceasul Sistemului Windows

Previzualizare laborator:

Extras din laborator:

1.Scopul lucrarii: De studiat metodele si principiile de lucru cu timer-ul.

2.Sarcina lucrarii: De scris un program, care realizeaza urmatoarele.

- Un ceas digital (ora:min:sec), utilizind timerul pentru reinoirea la fiecare secunda.

- Un ceas analogic( de desena ciferblatul si arcele, utilizind primitivele GDI ), utilizind timer-ul pentru reinoirea la

fiecare secunda.

3. Intrebari de control:

3.1. Enumerati principalele intrebiuntari ale ceasului de sistem.

3.2. Este posibila activarea simultana a citorva ceasuri ? Daca da, atunci cite ceasuri pot fi activate simultan in

sistemul windows?

3.3. Care este destinatia intreruperii 08h?

3.4. Din ce cauza intreruperea de ceas este o intrerupere asinctona?

3.5. Care este instructiunea de alocare a ceasului? Descrieti parametrii.

4. Raspunsuri la intrebari:

4.1. In primul rind, ceasul se utilizeaza pentru evidenta timpului. Ceasul de sistem se utilizeaza pentru pastrarea

unui raport referitor la starea resurselor sistemului windows, functioneaza pentru postalarma. Asigura facilitatea

multitasking, in acest context este important faptul ca programele inapoiaza cit de curind posibil, daca un program

trebuie sa faca multe prelucrari, el poate imparti aceste proceduri in unitati mai mici si le poate prelucra pe fiecare la

primirea mesajelor WM_TIMER.De asemenea ceasul de sistem implimenteaza caracteristica de autosalvare.

4.2. Da, activarea simultana a mai multor ceasuri este posibila. Pentru a activa un ceas se apeleaza functia

SetTimer( HWND, UINT_PTR, UINT, TIMERPROC ); unde al doilea parametru identifica ceasul, precul

este de tipul UINT_PTR care este intre limitele de la 0 la 231-1, respectiv numarul de ceasuri care se poate activat,

pentru compilatorul Microsoft Visual Studio 2005.

4.3. Intreruperea 08h sau “clock tick timer tick”in este destinata pentru actualizarea valorii

corespunzatoare a timpului la fiecare 54 925ms sau aproximativ 18.2ori pe secunda. MS-Dos utilizeaza aceste

valori pentru a calcula timpul curent. Iar aplicatiile non-Windows prin interceptarea intreruperii 08h formeaza

intreruperea de ceas.

4.4. Deoarece se produce aleator in raport cu programul pe care il intrerupe, ca si intreruperile efectuate de mouse sau

tastatura. Dar mesajele WM_TIMER nu sint asincrone deoarece ele se plaseaza in coada de mesaje.

4.5. Functia de alocare a unui ceas este SetTimer( HWND hwnd, UINT_PTR id, UINT ms, TIMERPROC lpfn );

Unde: hwnd- prin acest parametru fuctia afla carei ferestre sa ii aloce ceasul.

id- numarul de identificare in cadrul ferestrei, destinatia pentru a aloca mai multe timere.

ms- timpul in milisecunde, peste care fereastra va primi mesaje WM_TIMER.

lpfn- long pointer to timer function, are destinatia de actualiza ferestre derivate a ferestrei de baza.

5.Listingul programului (efectuat in Visual Studio 2005) :

#include "stdafx.h"

#include "Timer.h"

#include <list>

#include <time.h>

#include <math.h>

#define MAX 100

#define TIMER_SEC 1

#define SECUNDE 1000

#define MoveTo( hdc, x, y ) MoveToEx( hdc, x, y, NULL );

using namespace std;

TCHAR ClassName[MAX]; TCHAR ClassTitle[MAX];

void LoadTCHAR( const char *, TCHAR *);

//------------------------- Structura Rect pentru linii -----------------------

struct MyRECT

{ long _left; long _top;

long _right;long _bottom;

int _center_x; int _center_y;

MyRECT()

:_left(0), _right(0),

_top(0), _bottom(0),

_center_x(0), _center_y(0){};

MyRECT( long left, long top, long right, long bottom )

:_left(left), _right(right),

_top(top), _bottom(bottom),

_center_x(left+(right-left)/2),

_center_y( top+(bottom-top)/2){};

void set_rect( long left, long top, long right, long bottom )

{ _bottom = bottom; _left = left ;

_top = top ; _right = right ;

_center_x=(left+(right-left)/2);

_center_y=(top+(bottom-top)/2);}

virtual ~MyRECT(){}; };

//------------------------- Classa pentru desenarea liniilor-------------------

class LINE: public MyRECT

{ public:LINE(): MyRECT( 0, 0, 0, 0 ){ };

LINE( long left, long top, long right, long bottom )

: MyRECT( left, top, right, bottom ){};

void show_figure( const HDC &hdc )const

{ MoveTo( hdc, _left, _top );

LineTo( hdc, _right, _bottom );}

void set_line( long left, long top, long right, long bottom )

{ set_rect( left, top, right, bottom );}

};

Observații:

Exeplu de realizare a interceptarii intreruperilor de sistem prin afisarea orei intr-o fereastra. exemplul facut in C++

Download gratuit

Documentul este oferit gratuit,
trebuie doar să te autentifici in contul tău.

Structură de fișiere:
  • Ceasul Sistemului Windows.doc
Alte informații:
Tipuri fișiere:
doc
Nota:
8/10 (1 voturi)
Nr fișiere:
1 fisier
Pagini (total):
11 pagini
Imagini extrase:
11 imagini
Nr cuvinte:
3 099 cuvinte
Nr caractere:
21 618 caractere
Marime:
33.88KB (arhivat)
Publicat de:
NNT 1 P.
Nivel studiu:
Facultate
Tip document:
Laborator
Domeniu:
Limbaje de Programare
Predat:
la facultate
Materie:
Limbaje de Programare
Profesorului:
Besliu Victor
Sus!