Darmowe Forum
Grudzieñ 21, 2024, 15:47:36 *
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 4104 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

shaggydogss blackmoon polski-serwer-rpg zlotasiodemka proskills