GetTimeOfday ist eine CLOPY -Bibliotheksfunktion von C, die normalerweise verwendet wird, um die aktuelle Systemzeit zu erhalten, wobei die Genauigkeit Mikrosekunden erreicht. Seine Aussage lautet wie folgt:
<span><span><span class="hljs-type">int</span></span><span> </span><span><span class="hljs-title function_">gettimeofday</span></span><span><span class="hljs-params">(<span class="hljs-keyword">struct</span></span></span><span> timeval *tv, </span><span><span class="hljs-keyword">struct</span></span><span> timezone *tz);
</span></span>
TV ist eine Zeitvalstruktur , die Sekunden und Mikrosekunden enthält.
TZ ist Zeitzoneninformationen, und wir können normalerweise Null übergeben, da die Zeitzoneninformationen nicht in unserem Fokus liegen.
Der Rückgabewert von GetTimeOfday ist die aktuelle Zeit in Sekunden und Mikrosekunden, mit denen die Ausführungszeit der Aufgabe genau berechnet werden kann.
Schlaffunktion
Die Schlaffunktion wird verwendet, um die Ausführung eines Programms zu pausieren, und ihre Einheit beträgt Sekunden, die normalerweise zur Steuerung der Wartezeit des Codes verwendet werden. Seine Aussage lautet wie folgt:
<span><span><span class="hljs-type">unsigned</span></span><span> </span><span><span class="hljs-type">int</span></span><span> </span><span><span class="hljs-title function_">sleep</span></span><span><span class="hljs-params">(<span class="hljs-type">unsigned</span></span></span><span> </span><span><span class="hljs-type">int</span></span><span> seconds);
</span></span>
Die Schlaffunktion kann jedoch nur auf die zweite Ebene genau sein. Wenn eine höhere Präzisionszeitregelung erforderlich ist, können wir die Usleep -Funktion verwenden, die es uns ermöglicht, die Zeit auf Mikrosekundenebene zu überholen.
Angenommen, Sie müssen die Ausführungszeit der Aufgabe im Programm genau steuern, z. Wir können GetTimeOfday verwenden, um die aktuelle Zeit zu erhalten und die Schlaffunktion zu kombinieren, um das Intervall jeder Ausführung anzupassen.
Holen Sie sich die aktuelle Zeit
Wir rufen zuerst GetTimeofday an, um die aktuelle Systemzeit zu erhalten. Dies zeigt die Zeit, in der die Aufgabe ausgeführt wird.
Berechnen Sie die Zielzeit
Angenommen, wir brauchen die Aufgabe, alle 100 Millisekunden auszuführen. Nachdem Sie die Startzeit erhalten haben, können Sie die Zielzeit für die Ausführung der nächsten Aufgaben berechnen. Die Zielzeit entspricht der aktuellen Zeit sowie dem Aufgabenausführungsintervall.
Warten Sie, bis die Zielzeit ankommt
Nach der Berechnung der Zielzeit können wir die Differenz zwischen der aktuellen Zeit und der Zielzeit berechnen und Schlaf oder Usleep nutzen, um genau zu warten. Dies kann verhindern, dass die Aufgabe zu lange oder zu kurz ausgeführt wird.
Steuern Sie die Genauigkeit von Aufgaben
Wenn Sie die Ausführungszeit der Aufgabe genauer steuern möchten, können Sie die aktuelle Zeit nach der Ausführung der Aufgabe überprüfen, um sicherzustellen, dass das Intervall zwischen den Aufgaben den Anforderungen entspricht.
Hier ist ein Beispielcode, der GetTimeOfday und Sleep verwendet, um die Ausführungszeit der Aufgaben zu steuern:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Legen Sie die Intervallzeit für jede Aufgabenausführung fest(Einheit:Sekunden und Mikrosekunden)</span></span><span>
</span><span><span class="hljs-variable">$interval_sec</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// Zweite</span></span><span>
</span><span><span class="hljs-variable">$interval_usec</span></span><span> = </span><span><span class="hljs-number">100000</span></span><span>; </span><span><span class="hljs-comment">// 微Zweite,100毫Zweite</span></span><span>
</span><span><span class="hljs-comment">// Holen Sie sich die aktuelle Zeit</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getCurrentTime</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">gettimeofday</span></span><span>();
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$time</span></span><span>[</span><span><span class="hljs-string">'sec'</span></span><span>] * </span><span><span class="hljs-number">1000000</span></span><span> + </span><span><span class="hljs-variable">$time</span></span><span>[</span><span><span class="hljs-string">'usec'</span></span><span>]; </span><span><span class="hljs-comment">// 返回当前时间的微Zweite数</span></span><span>
}
</span><span><span class="hljs-comment">// Berechnen Sie die Zielzeit für die Aufgabenausführung</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">getTargetTime</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$interval_sec</span></span></span><span>, </span><span><span class="hljs-variable">$interval_usec</span></span><span>) {
</span><span><span class="hljs-variable">$current_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getCurrentTime</span></span><span>();
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$current_time</span></span><span> + </span><span><span class="hljs-variable">$interval_sec</span></span><span> * </span><span><span class="hljs-number">1000000</span></span><span> + </span><span><span class="hljs-variable">$interval_usec</span></span><span>;
}
</span><span><span class="hljs-comment">// Simulieren Sie eine zeitgesteuerte Aufgabe</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">performTask</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
</span><span><span class="hljs-comment">// Simulation der Aufgabenausführung(Zum Beispiel:Verarbeitungsdaten、fragenAPIWarten)</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Task performed at: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span><span><span class="hljs-comment">// Hauptprogramm</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-literal">true</span></span><span>) {
</span><span><span class="hljs-comment">// Holen Sie sich die aktuelle Zeit</span></span><span>
</span><span><span class="hljs-variable">$current_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getCurrentTime</span></span><span>();
</span><span><span class="hljs-comment">// Berechnen Sie die Zielzeit</span></span><span>
</span><span><span class="hljs-variable">$target_time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getTargetTime</span></span><span>(</span><span><span class="hljs-variable">$interval_sec</span></span><span>, </span><span><span class="hljs-variable">$interval_usec</span></span><span>);
</span><span><span class="hljs-comment">// Aufgaben ausführen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">performTask</span></span><span>();
</span><span><span class="hljs-comment">// 计算Warten待时间</span></span><span>
</span><span><span class="hljs-variable">$sleep_time</span></span><span> = </span><span><span class="hljs-variable">$target_time</span></span><span> - </span><span><span class="hljs-title function_ invoke__">getCurrentTime</span></span><span>();
</span><span><span class="hljs-comment">// Wenn die Aufgabenausführungszeit kurz ist,Kann bestanden werden usleep 来精确Warten待</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$sleep_time</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">usleep</span></span><span>(</span><span><span class="hljs-variable">$sleep_time</span></span><span>); </span><span><span class="hljs-comment">// Warten待直到目标时间到达</span></span><span>
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
In diesem Beispiel wird die Aufgabe alle 100 Millisekunden ausgeführt. Erhalten Sie die aktuelle Zeit durch die GetTimeOfday -Funktion, berechnen Sie die Zielzeit und verwenden Sie die Usleep -Funktion genau. Dies ermöglicht eine präzise Kontrolle der Aufgaben und vermeidet Zeitabweichungen, die durch Systemplanung oder andere Faktoren verursacht werden.