C++, dass ein boost thread warten Sie 1 Sekunde
Habe ich einen boost-thread mit:
boost::thread gew(&connectionThread); wo connectionThread ist eine einfache void-Funktion. Dies funktioniert gut, jedoch, wenn ich versuche, es zu machen, warten Sie einige Sekunden, zum Beispiel mit:
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += 1;
boost::thread::sleep(xt); //Sleep for 1 second
Das Programm stürzt bei der xtime_get Linie. Sogar, wenn Sie manuell versuchen, xt.sec funktioniert es nicht. Ich habe versucht, mehrere andere Methoden, aber ich kann nicht scheinen, damit es funktioniert. Gibt es etwas, was ich falsch mache? Ist es ein einfacher Weg, um mein Ziel erreichen?
- Mehr information erforderlich - dieses stürzt auf die xtime_get Linie? Wenn ja, wie wird es Abstürzen, wenn Sie manuell die xt (oder es gerade nicht so Verhalten, wie Sie wollen)?
- In welcher Weise wird es nicht funktionieren, wenn Sie versuchen, xt.Sek manuell? xt.sec = 1 ist wahrscheinlich eine unglaublich kurze Zeit, wie ich denke, dass die sec ist zumindest in Millisekunden. Wenn, so würden Sie schlafen, für eine Millisekunde.
- boost.org/doc/libs/1_38_0/doc/html/thread/... es sieht so aus, dass die aktuelle version der Bibliothek verwendet nun die Komponenten, die von boost::date_time geben Sie die Länge.
- hoffe Sie sind nicht zu vergessen, gehören header-Datei <boost/thread/xtime.hpp> wie mich
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht etwas entlang diesen Linien:
boost::xtime_get()
sieht aus wie einer von den wenigen Boost-APIs, die nicht umgesetzt in eine Kopfzeile, das könnte also so etwas wie nicht mit der Boost-library kompiliert korrekt. Dies ist wahrscheinlich somelike mit unpassenden Aufrufkonventionen oder so etwas. Ich weiß nicht, aus der Spitze von meinem Kopf, welche Schritte müssen Sie möglicherweise durch zu gehen, um den Wiederaufbau der Bibliothek - alle, die ich je benutzt habe in Boost wurde Zeug, das nur die Kopfzeilen.Könnte es hilfreich sein, wenn Sie gerade Spur in die
xtime_get()
routine, auch wenn es auf der assembly-Ebene. Diextime
struct ist sehr, sehr basic undxtime_get()
wirklich nicht alles tun, mehr als call eine Plattform-spezifische API, um die zahlen zu Stecker in diextime
struct.Mit diesem code (nicht-wissen, zum Beispiel, wo Sie es), alles, was ich sagen kann ist, dass die
xtime_get
Methode gibt den Typ der Kennzahl zurückgegeben. Das heißt, Sie müssen sicher sein, zum Beispiel, dass die folgenden assert hält:Kann es passieren, dass in Ihrem system dies nicht der Fall ist.
Jedoch, sich den code wieder kommt es mir in den Sinn, dass der Absturz nicht im Zusammenhang mit diesem Aufruf insbesondere, aber andere Dinge, die Sie tun in Ihrem Antrag. Wieder, es hängt davon ab, wo du bist, mit diesem code. Ist es innerhalb der
operator()
von deinem thread?