Darmowe Forum

C++ => Podstawy C++ cz. I => W±tek zaczêty przez: admin Marzec 24, 2012, 10:05:37



Tytu³: Volatile - opis miennej w C++
Wiadomo¶æ wys³ana przez: admin Marzec 24, 2012, 10:05:37


S³ówko volatile oznacza jednoznacznie ulotny.
Warto¶æ zmiennej te¿ nie zmieni siê dopóki sami tego nie uczynimy. Pewne zmienne mog± zostaæ zmodyfikowane bez naszaj woli, wiêcej mog± zostaæ zmienione bez naszej wiedzy. S± czasem pewne specyficzne sytuacje, kiedy warto¶æ zmiennej mo¿e ulec zmianie bez inicjatywy z naszej strony. Proszê wyobraziæ sobie tak± sytuacjê, piszemy program dla sterownika steruj±cego ilo¶ci± przep³ywaj±cego powietrza w silniku spalinowym. Przep³yw powietrza zmienia siê co kilkadziesi±t milisekund. Program powinien odczytywaæ warto¶æ przep³ywu co te kilkana¶cie milisekund inaczej mo¿e pojawiæ siê b³±d pomiarowy. Aby siê przed tym ustrzec stosuje siê w³a¶nie modyfikator volatile. Informuje on kompilator, ¿e dana zmienna zawiera ulotn± warto¶æ i na wszelki wypadek nale¿y j± kontrolowaæ czê¶ciej. Oczywi¶cie ten modyfikator jest zbêdny w programach pisanych na co dzieñ. W takich programach zmienne nie mog± siê zmieniaæ od tak sobie. Ten modyfikator jest natomiast przydatny je¶li opracowaæ oprogramowanie urz±dzeñ zewnêtrznych.

    volatile int adam;

Zmienna zdefiniowana w taki sposób bêdzie bacznie kontrolowana przez procesor.


Tytu³: Odp: Volatile - opis miennej w C++
Wiadomo¶æ wys³ana przez: admin Marzec 24, 2012, 10:27:08
Przyk³ad programu wykorzystuj±cego zmienn± typu voltaire

#include <cstdlib>
#include <iostream>
#include <iostream>
#include <windows.h>
using namespace std;

volatile bool pilnuj = true;
int Dane = 0;

unsigned ThreadFunc1( void* pArguments ) {
   while (pilnuj)
      Sleep(0);   

   cout << "Dana = " << Dane << endl;
   return 0;
}

unsigned  ThreadFunc2( void* pArguments ) {
   Sleep(2000);
   Dane++;   
   pilnuj = false;
   return 0;
}

int main() {
   HANDLE hThread1, hThread2;
   DWORD retCode;

   hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc1,
      NULL, 0, NULL);
   hThread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadFunc2,
      NULL, 0, NULL);
   if (hThread1 == NULL || hThread2 == NULL) {
      if (hThread1 != NULL) CloseHandle(hThread1);
      if (hThread2 != NULL) CloseHandle(hThread2);
      cout << "Do bani to pilnowanie." << endl;
      return 1;
   }
   
  system("PAUSE");
    return EXIT_SUCCESS; }


Polityka cookies
Darmowe Fora | Darmowe Forum

articz shaggydogss blackmoon spw proskills