Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare:laborator-04 [2021/03/24 17:56]
teodor_stefan.dutu [Exercițiul 1 - timer] Exercitiu - Windows
so:laboratoare:laborator-04 [2022/03/29 20:51] (current)
teodor_stefan.dutu [Exercițiul 2 - Normal signals vs Real-Time signals]
Line 550: Line 550:
    
     if (WaitForSingleObject(timerHandle,​ INFINITE) != WAIT_OBJECT_0) {     if (WaitForSingleObject(timerHandle,​ INFINITE) != WAIT_OBJECT_0) {
-        fprintf("​WaitForSingleObject failed (%d)\n",​ GetLastError());​+        fprintf(stderr, ​"​WaitForSingleObject failed (%d)\n",​ GetLastError());​
         exit(-1);         exit(-1);
     }     }
Line 574: Line 574:
 </​note>​ </​note>​
  
-<note tip> Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils'' ​din arhivă ​există un fișier ''​utils.h''​ cu funcții utile. </​note>​ +<note tip> Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils''​ există un fișier ''​utils.h''​ cu funcții utile. </​note>​
- +
-==== Exercițiul 0 - GSOC ==== +
-Google Summer of Code este un program de vară în care studenții +
-(indiferent de anul de studiu) sunt implicați în proiecte Open Source +
-pentru a își dezvolta skill-urile de programare, fiind răsplătiți cu o +
-bursă a cărei valoare [[https://​developers.google.com/​open-source/​gsoc/​help/​student-stipends|depinde de țară]] +
-([[https://​developers.google.com/​open-source/​gsoc|pagină principală GSOC]]). +
- +
-UPB se află în top ca număr de studenți acceptați; în fiecare an fiind +
-undeva la aprox. 30-40 de studenți acceptați. +
-Vă încurajăm să aplicați! +
  
  
Line 633: Line 621:
 Citiți din pagina de manual ''​man 7 signal''​ secțiunea "​Real-time signals"​ și revedeți secțiunea [[#Tipuri standard de semnale| Tipuri standard de semnale]]. Citiți din pagina de manual ''​man 7 signal''​ secțiunea "​Real-time signals"​ și revedeți secțiunea [[#Tipuri standard de semnale| Tipuri standard de semnale]].
  
-<note tip>​Diferența între numărul semnalelor primite se datorează faptului că semnalele cu indecșii între ''​SIGRTMIN''​ și ''​SIGRTMAX''​ sunt semnale real time, prin urmare se garantează că ele ajung la destinație. Vezi [[http://​www.linuxprogrammingblog.com/​all-about-linux-signals?​page=9 | link]]. </​note>​+<note tip>​Diferența între numărul semnalelor primite se datorează faptului că semnalele cu indecșii între ''​SIGRTMIN''​ și ''​SIGRTMAX''​ sunt semnale real time, prin urmare se garantează că ele ajung la destinație. </​note>​
 ==== Exercițiul 3 - askexit ==== ==== Exercițiul 3 - askexit ====
  
Line 683: Line 671:
 ==== Exercițiul 1 - timer ==== ==== Exercițiul 1 - timer ====
  
-Intrați în directorul ''​1-timer''​ și urmăriți conținutul fișierului ''​mytimer.c''​. Realizați un program care afișează data curentă la fiecare 2''​TIMEOUT'' ​secunde. +Intrați în directorul ''​1-timer''​ și urmăriți conținutul fișierului ''​mytimer.c''​. Realizați un program care afișează data curentă la fiecare 2 secunde. 
-Tipul [[https://​docs.microsoft.com/​en-us/​windows/​win32/​api/​winnt/​ns-winnt-large_integer-r1|LARGE_INTEGER]] suportă mai multe moduri de setare a valorii, fie prin setarea a două jumatăți, mai exact componentele ''​LowPart''​ și ''​HighPart'',​ fie accesând întreaga valoare, prin componenta ''​QuadPart''​. Pentru simplitate, folosiți componenta ''​QuadPart''​ a tipului ''​LARGE_INTEGER''​ pentru specificarea timeoutului,​ setându-l la macro-ul ''​TIMEOUT''​.+Tipul [[https://​docs.microsoft.com/​en-us/​windows/​win32/​api/​winnt/​ns-winnt-large_integer-r1|LARGE_INTEGER]] suportă mai multe moduri de setare a valorii, fie prin setarea a două %%"%%jumatăți%%"%%, mai exact componentele ''​LowPart''​ și ''​HighPart'',​ fie accesând întreaga valoare, prin componenta ''​QuadPart''​. Pentru simplitate, folosiți componenta ''​QuadPart''​ a tipului ''​LARGE_INTEGER''​ pentru specificarea timeoutului,​ setându-l la macro-ul ''​TIMEOUT''​.
  
 Observați că timeoutul este **negativ** și expiră la atingerea valorii ''​0'',​ întrucât timerul funcționează incrementând valoarea acestui timeout, până la 0. Al treilea argument al [[http://​msdn.microsoft.com/​en-us/​library/​ms686289(VS.85).aspx|SetWaitableTimerObject]] este timpul **(în milisecunde)** la care se reactivează timerul. Observați că timeoutul este **negativ** și expiră la atingerea valorii ''​0'',​ întrucât timerul funcționează incrementând valoarea acestui timeout, până la 0. Al treilea argument al [[http://​msdn.microsoft.com/​en-us/​library/​ms686289(VS.85).aspx|SetWaitableTimerObject]] este timpul **(în milisecunde)** la care se reactivează timerul.
Line 719: Line 707:
 Ramâneți în directorul ''​6-timer''​. Modificați sursa de la exercițiul anterior astfel încât să configurați funcția de handler direct din parametrii funcției [[http://​www.kernel.org/​doc/​man-pages/​online/​pages/​man2/​timer_create.2.html|timer_create()]]. Urmăriți conținutul structurii ''​sigevent''​. Un exemplu găsiți [[http://​nicku.org/​ossi/​lab/​processes/​programming-posix-threads/​sigev_thread.c|aici]]. Ramâneți în directorul ''​6-timer''​. Modificați sursa de la exercițiul anterior astfel încât să configurați funcția de handler direct din parametrii funcției [[http://​www.kernel.org/​doc/​man-pages/​online/​pages/​man2/​timer_create.2.html|timer_create()]]. Urmăriți conținutul structurii ''​sigevent''​. Un exemplu găsiți [[http://​nicku.org/​ossi/​lab/​processes/​programming-posix-threads/​sigev_thread.c|aici]].
  
- 
-===== Soluții ===== 
- 
-[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab04-sol.zip | Soluții exerciții laborator 4]] 
  
  
so/laboratoare/laborator-04.1616601396.txt.gz · Last modified: 2021/03/24 17:56 by teodor_stefan.dutu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0