كيف يمكنك إضافة تأخير توقيت لبرنامج C ++؟

StackOverflow https://stackoverflow.com/questions/158585

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول أن إضافة تأخير توقيت في برنامج C ++، وأتساءل عما اذا كان أي شخص لديه أي اقتراحات بشأن ما يمكن أن أحاول أو معلومات أستطيع أن ننظر؟

واتمنى لو كان لدي مزيد من التفاصيل حول كيف وانا تنفيذ هذا التأخير الوقت المناسب، ولكن حتى لدي مزيد من المعلومات حول كيفية إضافة تأخير توقيت ولست متأكدا بشأن الكيفية التي ينبغي I بل محاولة لتنفيذ ذلك.

هل كانت مفيدة؟

المحلول

وWin32 و: Sleep(milliseconds) ماذا أنت ما

ويونيكس: usleep(microseconds) هو ما تريد

والنوم () يستغرق سوى عدد الثواني التي غالبا ما تكون طويلة جدا.

نصائح أخرى

وإجابة محدثة لC ++ 11:

استخدم وظائف sleep_for وsleep_until:

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread; // sleep_for, sleep_until
    using namespace std::chrono; // nanoseconds, system_clock, seconds

    sleep_for(nanoseconds(10));
    sleep_until(system_clock::now() + seconds(1));
}

ومع هذه المهام ليس هناك تعد هناك حاجة لإضافة وظائف جديدة باستمرار لتحسين الدقة: sleep، usleep، nanosleep، الخ sleep_for وsleep_until هي وظائف قالب التي يمكن أن تقبل القيم في أي قرار عن طريق أنواع chrono. ساعة، ثانية، فمتوثانية، وما إلى ذلك.

في C ++ 14 يمكنك زيادة تبسيط الرمز مع اللواحق الحرفي لnanoseconds وseconds:

#include <chrono>
#include <thread>

int main() {
    using namespace std::this_thread;     // sleep_for, sleep_until
    using namespace std::chrono_literals; // ns, us, ms, s, h, etc.
    using std::chrono::system_clock;

    sleep_for(10ns);
    sleep_until(system_clock::now() + 1s);
}

ملحوظة أن المدة الفعلية من النوم تعتمد على التنفيذ: يمكنك أن تطلب من النوم لمدة 10 نانو ثانية، ولكن قد ينتهي التنفيذ إلى النوم لميلي ثانية واحدة بدلا من ذلك، إذا كان هذا هو أقصر يمكن أن تفعله

.
#include <unistd.h>
usleep(3000000);

وهذا سوف ينام أيضا لمدة ثلاث ثوان. يمكنك تحسين الأرقام قليلا وإن كان أكثر.

هل تريد شيئا بهذه البساطة مثل

sleep(3);

لاحظ أن هذا لا يضمن أن مقدار الوقت ينام موضوع سوف تكون في أي مكان قريب من فترة النوم، فإنه يضمن فقط أن مقدار الوقت قبل موضوع مستمر والتنفيذ تكون على الاقل المبلغ المطلوب. والتأخير الفعلي تختلف تبعا للظروف (خاصة تحميل على الجهاز في السؤال)، وربما تكون أوامر من حجم أعلى من وقت النوم المطلوب.

وأيضا، لا قائمة لماذا تحتاج إلى النوم ولكن يجب تجنب عادة باستخدام التأخير كوسيلة من وسائل التزامن.

ويمكنك أيضا استخدام لتحديد (2) إذا كنت تريد ميكروثانية الدقة (وهذا يعمل على منصة التي ليس لديها usleep (3))

وسوف التعليمة البرمجية التالية الانتظار لمدة 1.5 ثانية:

#include <sys/select.h>
#include <sys/time.h>
#include <unistd.h>`

int main() {
    struct timeval t;
    t.tv_sec = 1;
    t.tv_usec = 500000;
    select(0, NULL, NULL, NULL, &t);
}

و`

ولقد وجدت أن "_sleep(milliseconds);" (بدون علامات التنصيص) يعمل بشكل جيد ل Win32 إذا قمت بتضمين مكتبة chrono

ومنها مثلا:

#include <chrono>

using namespace std;

main
{
    cout << "text" << endl;
    _sleep(10000); // pauses for 10 seconds
}

تأكد من تضمين تسطير قبل النوم.

نعم، والنوم هو على الارجح وظيفة الاختيار هنا. لاحظ أن مرور الوقت إلى وظيفة هو أصغر مقدار الوقت سوف ترابط استدعاء يكون غير نشط. هكذا على سبيل المثال إذا كنت استدعاء النوم مع 5 ثوان، وكنت يضمن لك الخيط الخاص بك سوف ينام لمدة 5 ثوان على الأقل. يمكن أن يكون 6 أو 8 أو 50، اعتمادا على ما يقوم به نظام التشغيل. (أثناء تنفيذ OS الأمثل، وهذا سوف يكون قريبا جدا من 5.)
ميزة أخرى مفيدة من وظيفة النوم هي لتمرير 0. وهذه القوة تبديل سياق من الخيط الخاص بك.

وبعض المعلومات الإضافية:
http://www.opengroup.org/onlinepubs/000095399/functions/sleep. أتش تي أم أل

ويمكنك أن تجرب هذه التعليمات البرمجية المتكررة:

#include<chrono>
#include<thread>

int main(){
    std::this_thread::sleep_for(std::chrono::nanoseconds(10));
    std::this_thread::sleep_until(std::chrono::system_clock::now() + std::chrono::seconds(1));
}

وتأخير الانتاج في حزب الشعب الكمبودي عن الوقت المحدد، يمكنك استخدام وظيفة النوم () من قبل بما في ذلك ملف الرأس WINDOWS.H بناء الجملة من أجل وظيفة النوم () هو النوم (time_in_ms) ك

cout<<"Apple\n";
Sleep(3000);
cout<<"Mango";

والمخرجات. فوق رمز ستطبع أبل والانتظار لمدة 3 ثوان قبل الطباعة مانجو.

وبناء الجملة:

والنوم باطل (ثواني غير موقعة)؛

والنوم () تعلق التنفيذ لفاصل زمني (ثانية). مع دعوة إلى النوم، يتم تعليق البرنامج الحالي من التنفيذ لعدد الثواني التي يحددها ثواني حجة. الفاصل الزمني دقيقة فقط لأقرب مائة من الثانية أو دقة ساعة النظام التشغيل، أيهما أقل دقة.

وقد وفرت

وكثيرون آخرون معلومات جيدة للنوم. وأنا أتفق مع إسفين أن النوم نادرا ما الحل الأنسب.

إذا كنت نائما كما كنت انتظر شيئا، فأنت أفضل حالا الانتظار فعلا لهذا الشيء / الحدث. ننظر إلى الحالة المتغيرات لهذا الغرض.

وأنا لا أعرف ما OS تحاول القيام بذلك ولكن للخيوط وتزامن هل يمكن أن ننظر إلى في زيادة الترابط المكتبات (<لأ href =" http://www.boost.org/doc/libs/1_36_0/doc/html/thread/synchronization أتش تي أم أل # thread.synchronization.condvar_ref "يختلط =" نوفولو noreferrer "> زيادة الحالة Varriable).

ونقل الآن إلى الطرف الآخر إذا كنت تحاول الانتظار لفترات قصيرة للغاية ثم هناك بضعة خيارات نمط الإختراق. إذا كنت تعمل على نوع من منصة جزءا لا يتجزأ من حيث لا يتم تطبيق 'النوم' ثم يمكنك محاولة حلقة بسيطة (ل/ في حين الخ) مع هيئة فارغة (كن حذرا المترجم لا تحسين بعيدا). بالطبع وقت الانتظار يعتمد على أجهزة معينة في هذه الحالة. لفترة قصيرة حقا "ينتظر" يمكنك محاولة جمعية "نوب". أشك بشدة هذه هي ما كنت بعد ولكن من دون أن يعرفوا لماذا تحتاج إلى الانتظار من الصعب أن تكون أكثر تحديدا.

في ويندوز يمكنك تضمين المكتبة النوافذ واستخدام "النوم (0)؛" للنوم البرنامج. فإنه يأخذ القيمة التي تمثل ميلي ثانية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top