{"id":4265,"date":"2019-05-10T13:43:37","date_gmt":"2019-05-10T12:43:37","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=4265"},"modified":"2019-05-10T13:43:37","modified_gmt":"2019-05-10T12:43:37","slug":"c-guns-play-with-threads-and-future","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=4265","title":{"rendered":"C++ Guns: play with threads and future"},"content":{"rendered":"<p>Um schnell zu testen ob ein Rechner erreichbar ist, kann man ihn pingen. Der ping timeout dauert aber gern mal eine Sekunde. Wenn 10 Rechner nicht erreichbar sind, wartet man auch 10 Sekunden auf das Programm. Statt potentiell nur eine Sekunde. Die ping Anweisung kann man gut parallel ausf\u00fchren. Zeit f\u00fcr std::async und std::future<\/p>\n<p>Hier mein Beispiel, mit etwas Spielwiese:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &lt;cstdlib&gt;\r\n#include &lt;iostream&gt;\r\n#include &lt;future&gt;\r\n#include &lt;thread&gt;\r\n#include &lt;string_view&gt;\r\n\r\nauto status(std::string_view host) {\r\n  auto command = &quot;ping -W 1 -c 1 &quot; + std::string(host) + &quot; &gt;\/dev\/null 2&gt;&amp;1&quot;;\r\n  return std::pair{std::system(command.c_str()), host};\r\n}\r\n\r\nauto red() {\r\n  return &quot;&#92;&#48;33&#x5B;32m&quot;;\r\n}\r\n\r\nauto green() {\r\n  return &quot;&#92;&#48;33&#x5B;31m&quot;;\r\n}\r\n\r\nauto reset() {\r\n  return &quot;&#92;&#48;33&#x5B;0m&quot;;\r\n}\r\n\r\nstd::ostream&amp; operator &lt;&lt;(std::ostream&amp; s, const std::pair&lt;int, std::string_view&gt; p) {\r\n  s &lt;&lt; p.second &lt;&lt; &quot; &quot;;\r\n  if(p.first == 0) {\r\n      s &lt;&lt; red() &lt;&lt; &quot;UP &quot; &lt;&lt; reset();\r\n    } else {\r\n      s &lt;&lt; green() &lt;&lt; &quot;down &quot; &lt;&lt; reset();\r\n    }\r\n  return s;\r\n}\r\n\r\nint main() {\r\n    std::future f01 = std::async(std::launch::async, status, &quot;rechner01&quot;);\r\n    std::future f02 = std::async(std::launch::async, status, &quot;rechner02&quot;);\r\n    std::future f03 = std::async(std::launch::async, status, &quot;rechner03&quot;);\r\n    \/\/ ... \r\n    f01.wait();\r\n    f02.wait();\r\n    f03.wait();\r\n    \/\/ ...\r\n    std::cout &lt;&lt; f01.get() &lt;&lt; f02.get() &lt;&lt; f03.get() &lt;&lt; &quot;\\n&quot;;\r\n\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Um schnell zu testen ob ein Rechner erreichbar ist, kann man ihn pingen. Der ping timeout dauert aber gern mal eine Sekunde. Wenn 10 Rechner nicht erreichbar sind, wartet man auch 10 Sekunden auf das Programm. Statt potentiell nur eine Sekunde. Die ping Anweisung kann man gut parallel ausf\u00fchren. Zeit f\u00fcr std::async und std::future Hier [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[17],"class_list":["post-4265","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cpp"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4265"}],"version-history":[{"count":1,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4265\/revisions"}],"predecessor-version":[{"id":4266,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/4265\/revisions\/4266"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4265"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}