libtorrent - 200 Millisekunden Schlaf in Download-Schleife
-
Hallo,
rasterbar schrieb:
#include <iostream> #include <thread> #include <chrono> #include <libtorrent/session.hpp> #include <libtorrent/add_torrent_params.hpp> #include <libtorrent/torrent_handle.hpp> #include <libtorrent/alert_types.hpp> namespace lt = libtorrent; int main(int argc, char const* argv[]) { if (argc != 2) { std::cerr << "usage: " << argv[0] << " <magnet-url>" << std::endl; return 1; } lt::session ses; lt::add_torrent_params atp; atp.url = argv[1]; atp.save_path = "."; // save in current dir lt::torrent_handle h = ses.add_torrent(atp); for (;;) { std::vector<lt::alert*> alerts; ses.pop_alerts(&alerts); for (lt::alert const* a : alerts) { std::cout << a->message() << std::endl; // if we receive the finished alert or an error, we're done if (lt::alert_cast<lt::torrent_finished_alert>(a)) { goto done; } if (lt::alert_cast<lt::torrent_error_alert>(a)) { goto done; } } std::this_thread::sleep_for(std::chrono::milliseconds(200)); } done: std::cout << "done, shutting down" << std::endl; }Warum wird hier in Zeile 38 ein Timeout gemacht?
Hat das überhaupt einen Sinn?
-
Naja, das is ne Endlosschleife die was pollt so wie ich das sehe.
Wenn Du da nicht 100% Prozessorauslastung willst gebietet es der Anstand dass man den Thread immer mal wieder schlafen schickt, damit der OS Task Scheduler (oder wie auch immer das Ding heisst) auch mal andere zum Zug kommen lässt ohne gleich böse (preemptive) werden zu müssen.
-
In der Schleife wird doch nur auf das Ende des Download gewartet, ohne den Thread-Sleep würde ein Prozessor-Kern zu 100% ausgelastet (und den Download evtl. verlangsamen).
PS: Auf die "goto"-Zeilen gehe ich jetzt mal nicht ein

-
Ja, ich hab mir meine eigenen Klassen dazu geschrieben.
Könnten wir ne kleine Abstimmung machen?
Wer findet es besser...
...den Thread schlafen zu lassen, um Auslastung zu sparen oder
...nicht auf die Auslastung zu achten und somit den größten Download-Speed erreichen?Oder was ist generell besser?
-
rasterraster schrieb:
Ja, ich hab mir meine eigenen Klassen dazu geschrieben.
Könnten wir ne kleine Abstimmung machen?
Wer findet es besser...
...den Thread schlafen zu lassen, um Auslastung zu sparen oder
...nicht auf die Auslastung zu achten und somit den größten Download-Speed erreichen?Oder was ist generell besser?
Ich fürchte du verstehst da was nicht.
Wie gesagt wurde, diese Schleife lädt nichts runter!
Die wartet nur auf das Ende des Downloads - der wohl in einem anderen Thread läuft.
Schlimmstenfalls wartest Du 200ms zu lang (auf das Ende).
Ich denke deine Downloadzeiten werden um Grössenordnungen höher sein (Minuten?).
Also spielt das keine Rolle.
PS: Und ich würde kein Download-Zeugs tolerieren dass mir 100% CPU Kernauslastung erzeugt.
-
Ah Mist, ich hab dem Th69 nicht richtig zugelesen.
Okay, es gibt also kein Performance-Leck und an Auslastung wird gespart.
Danke.