{"id":234,"date":"2009-08-25T15:52:00","date_gmt":"2009-08-25T15:52:00","guid":{"rendered":"http:\/\/e-ware.org\/blog\/?p=234"},"modified":"2009-08-25T15:52:00","modified_gmt":"2009-08-25T15:52:00","slug":"didattica-cc-creare-uninterruzione-in-secondi","status":"publish","type":"post","link":"http:\/\/e-ware.org\/blog\/didattica-cc-creare-uninterruzione-in-secondi\/","title":{"rendered":"Didattica C\/C++: Creare un&#8217;interruzione in secondi"},"content":{"rendered":"<p><span>Alle volte pu\u00f2 succedere di aver bisogno di interrompere il regolare svolgimento di un codice scritto in C per un tempo di <\/span><span>n<\/span><span> secondi. Le strade da intraprendere in questo caso possono essere diverse: si potrebbe controllare , ad esempio l&#8217;ora di sistema con un ciclo ed uscirne solo quando sono passati i secondi desiderati. Questa soluzione, per quanto logica possa essere, porta problemi in termini di uso di CPU. E&#8217; pi\u00f9 facile, pertanto, ricorrere ad una semplicissima funziona del linguaggio C contenuta nella libreria unistd.h. La funzione in questione \u00e8 sleep che ha il seguente prototipo:<\/p>\n<p><\/span><\/p>\n<blockquote><p><span>unsigned int sleep(unsigner int second)<\/span><\/p><\/blockquote>\n<p><span><\/p>\n<p>dove <\/span><span>second<\/span><span> \u00e8 il tempo (espresso in secondi) per cui si vuole che il processo sia fermo.<\/p>\n<p>Ovviamente la praticit\u00e0 di questa funzione \u00e8 evidente ma proprio l&#8217;altro giorno mentre utilizzavo questo metodo mi sono imbattuto in un errore.<br \/>Il programma in questione era qualcosa del tipo:<br \/><code><br \/># include <stdio.h><br \/># include <unistd.h><\/p>\n<p>int main()<br \/>{<br \/> int i;<\/p>\n<p>  for (i=0;i<=4;i++)<br \/>  {<br \/>   printf(\"stringa\");<br \/>   sleep(1);<br \/>  }<\/p>\n<p> return 0;<br \/>}<br \/><\/code><\/p>\n<p>Nel terminale infatti avrei dovuto vedere stampata una parola ogni secondo per un tempo di 4 secondi; quando per\u00f2 lanciavo via terminale il mio programma compilato notavo che le mie parole venivano stampate tutte insieme senza tenere conto dell&#8217;attesa di sleep. Dov&#8217;era allora il problema? Bene il problema risiedeva in dei problemi di bufferizzazione dell&#8217;ouput standard. Il problema \u00e8 facilmente arginabile ponendo un fflush(stdout) dopo lo sleep; fflush infatti forza la scrittura dei dati presenti nel buffer. Pertanto, molto semplicemente il codice diventa:<br \/><code><br \/># include <stdio.h><br \/># include <unistd.h><\/p>\n<p>int main()<br \/>{<br \/> int i;<\/p>\n<p>  for (i=0;i<=4;i++)<br \/>  {<br \/>   printf(\"stringa\");<br \/>   sleep(1);<br \/>   fflush(stdout);<br \/>  }<\/p>\n<p> return 0;<br \/>}<br \/><\/code><\/p>\n<p>Spero di essere stato utile&#8230;..alla prossima!<\/p>\n<p><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alle volte pu\u00f2 succedere di aver bisogno di interrompere il regolare svolgimento di un codice scritto in C per un tempo di n secondi. Le strade da intraprendere in questo caso possono essere diverse: si potrebbe controllare , ad esempio l&#8217;ora di sistema con un ciclo ed uscirne solo quando sono passati i secondi desiderati. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,52,4],"tags":[],"class_list":["post-234","post","type-post","status-publish","format-standard","hentry","category-c","category-didattica","category-opencode"],"views":959,"_links":{"self":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":0,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"wp:attachment":[{"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/e-ware.org\/blog\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}