{"id":1196,"date":"2021-09-09T12:20:38","date_gmt":"2021-09-09T15:20:38","guid":{"rendered":"http:\/\/www.galirows.com.br\/meublog\/programacao\/?p=1196"},"modified":"2021-09-09T12:39:54","modified_gmt":"2021-09-09T15:39:54","slug":"usar-a-funcao-sleep-em-c-e-multiplataforma","status":"publish","type":"post","link":"https:\/\/www.galirows.com.br\/meublog\/programacao\/usar-a-funcao-sleep-em-c-e-multiplataforma\/","title":{"rendered":"Usar a fun\u00e7\u00e3o sleep() em C e multiplataforma"},"content":{"rendered":"\n<p>Em rela\u00e7\u00e3o a linguagem C, a fun\u00e7\u00e3o que faz um <em>sleep <\/em>n\u00e3o \u00e9 uma fun\u00e7\u00e3o padr\u00e3o da linguagem. Nesse sentido, \u00e9 necess\u00e1rio incluir uma biblioteca que contenha uma fun\u00e7\u00e3o que cumpra esse objetivo.<\/p>\n\n\n\n<p>Logo de in\u00edcio \u00e9 bom apresentar um problema relacionado com o <em>sleep<\/em>: ele varia de acordo com o sistema operacional que voc\u00ea estiver utilizando. No Windows, \u00e9 necess\u00e1rio utilizar a fun\u00e7\u00e3o Sleep() que est\u00e1 na biblioteca Windows.h. Em um sistema UNIX, como \u00e9 o caso do Linux, pode ser necess\u00e1rio utilizar a fun\u00e7\u00e3o sleep() ou a usleep(), que fazem parte da biblioteca unistd.h. Al\u00e9m do nome da fun\u00e7\u00e3o e biblioteca necess\u00e1ria, o funcionamento da fun\u00e7\u00e3o \u00e9 diferente dependendo do sistema operacional. Por esses motivos, seu c\u00f3digo precisa ser adaptado se voc\u00ea estiver no Windows ou um sistema Unix.<\/p>\n\n\n\n<p>Se voc\u00ea est\u00e1 interessado em saber como fazer uso do <em>sleep <\/em>apenas no Windows, pode ir direto para meu post <a href=\"http:\/\/www.galirows.com.br\/meublog\/programacao\/usar-a-funcao-sleep-em-c-no-windows\/\">fun\u00e7\u00e3o sleep() no Windows<\/a>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">A fun\u00e7\u00e3o sleep() do Unix espera um valor inteiro positivo (representando os segundos). Se voc\u00ea precisar de um intervalo menor de segundos (como 0,5 segundo) \u00e9 necess\u00e1rio utilizar a fun\u00e7\u00e3o usleep(), que suspende a execu\u00e7\u00e3o com um par\u00e2metro em microssegundos. <\/p>\n\n\n\n<p>A fun\u00e7\u00e3o Sleep() no Windows espera um valor inteiro positivo que representa os milissegundos. Sendo assim, mesmo que as fun\u00e7\u00f5es tenham o mesmo nome no Windows e Unix, seus par\u00e2metros esperados est\u00e3o em grandezas de tempo diferentes. Tamb\u00e9m \u00e9 importante observar que a fun\u00e7\u00e3o Sleep() no Windows inicia com sua primeira letra em mai\u00fasculo.<\/p>\n\n\n\n<p>Por esse motivo eu prefiro escrever o c\u00f3digo que faz uso do <em>sleep <\/em>de forma multiplataforma (<em>cross-plataform<\/em>) e por isso trago um c\u00f3digo nesse sentido. O c\u00f3digo \u00e9 mostrado a seguir e \u00e9 respons\u00e1vel por escrever um &#8220;.&#8221; (ponto) a cada meio segundo. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"c\" class=\"language-c line-numbers\">#include &lt;stdio.h&gt;\n\n#ifdef _WIN32 || _WIN64\n    #include &lt;Windows.h&gt;\n#else\n    #include &lt;unistd.h&gt;\n#endif\n\nint main() {\n  int i=0;\n\n  while (i++ &lt; 10) {\n      #ifdef _WIN32 || _WIN64\n        \/\/Sleep(1000); \/\/ Sleep 1 segundo\n        Sleep(500); \/\/ Sleep 0,5 segundo\n      #else\n        \/\/sleep(1); \/\/ Sleep 1 segundo\n        usleep(500*1000);  \/\/ Sleep 0,5 segundo (500 milisegundos)\n      #endif\n      printf(\".\");\n  }\n\n  return 0;\n}<\/code><\/pre>\n\n\n\n<p>Para o c\u00f3digo multiplataforma utilizo a diretiva <em><strong>#ifdef<\/strong><\/em> no meu c\u00f3digo. As diretivas <em><strong>#ifdef<\/strong><\/em> e <em><strong>#ifndef<\/strong><\/em> s\u00e3o diretivas de pr\u00e9-processamento.<\/p>\n\n\n\n<p>Em s\u00edntese, <em><strong>#ifdef<\/strong><\/em> verifica se algo est\u00e1 definido. A diretiva <em><strong>#ifndef<\/strong><\/em> verifica o oposto da condi\u00e7\u00e3o verificada por <em><strong>#ifdef<\/strong><\/em>. No meu c\u00f3digo eu utilizo <em><strong>#ifdef<\/strong><\/em> para verificar se estou utilizando um sistema Windows (aceitando 32 ou 64 bits). O funcionamento \u00e9 bem similar ao uso do desvio condicional <em>if<\/em>, inclusive com a op\u00e7\u00e3o do <em>else<\/em>.<\/p>\n\n\n\n<p>Com isso, quando o c\u00f3digo for compilado, \u00e9 verificado se estou no Windows ou n\u00e3o, compilando com o uso da biblioteca (trecho de c\u00f3digo das linhas 3-7) e instru\u00e7\u00f5es adequadas ao meu sistema operacional (trecho de c\u00f3digo das linhas 13-19).<\/p>\n\n\n\n<p class=\"has-text-align-right\"><em>Vale dizer que devem existir diversas formas de trazer esse funcionamento do sleep, mas eu mostrei a forma que eu utilizo<\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em rela\u00e7\u00e3o a linguagem C, a fun\u00e7\u00e3o que faz um sleep n\u00e3o \u00e9 uma fun\u00e7\u00e3o padr\u00e3o da linguagem. Nesse sentido, \u00e9 necess\u00e1rio incluir uma biblioteca que contenha uma fun\u00e7\u00e3o que cumpra esse objetivo. Logo de in\u00edcio \u00e9 bom apresentar um problema relacionado com o sleep: ele varia de acordo com o sistema operacional que voc\u00ea [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1196","post","type-post","status-publish","format-standard","hentry","category-c"],"aioseo_notices":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/comments?post=1196"}],"version-history":[{"count":6,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1196\/revisions"}],"predecessor-version":[{"id":1206,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/posts\/1196\/revisions\/1206"}],"wp:attachment":[{"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/media?parent=1196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/categories?post=1196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.galirows.com.br\/meublog\/programacao\/wp-json\/wp\/v2\/tags?post=1196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}