Darmowe Forum
Kwiecień 27, 2024, 23:26:09 *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Forum zostało uruchomione!
 
   Strona główna   Pomoc Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Volatile - opis miennej w C++  (Przeczytany 3932 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : 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.
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : 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; }
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

wladca-smokow fastkillers blackspider tdw zaburzenia