سؤال

سأقوم بتطوير خادم مخصص صغير في C/C ++ الذي سيتطلب تشغيل وقت للأبد. لقد كنت أبحث في وظائف بعض الوقت حيث مطلوب توقيت ميلي ثانية للحسابات. لدي مشكلتان أواجهان:

  1. باستخدام عدد صحيح 32 بت لتخزين عدد المللي ثانية منذ بدء العملية سوف يلفت حول حوالي 49 يومًا إعادة تعيين علامة إلى الصفر. لقد فكرت في استخدام أعداد صحيحة 64 بت ، باستخدام GetTimeOfday لاسترداد microseconds ولكن هذا يقودني إلى الجزء الثاني.

  2. لا يبدو أن هناك أي نداءات نظام قياسية للحصول على مللي ثانية مستقلة من النظام الأساسي

ما الذي يجب أن أفعله لحل كلتا كلتا كلتا القضيتين؟

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

المحلول

  1. استخدم عددًا صحيحًا 64 بت ، على افتراض أنه يمنحك وقتًا كافيًا

  2. انت على حق؛ لا يوجد معيار. احتمال واحد هو استخدام تعزيز DateTime المكتبة ، تجد بالتناوب آخر أو لفة الخاصة بك.

حظا طيبا وفقك الله!

نصائح أخرى

كما قيل بالفعل ، فإن المشكلة الأولى التي ستواجهها ستحصل على وقت موثوق بمللي ثانية.

أنا أعترف أنني على مراحل بعض الشيء على الرغم من السؤال.

أستطيع أن أفهم الحاجة إلى توقيت دقيق (مستوى ميلي ثانية ، وحتى ميكروثانية) ولكن توقيت 50 يومًا على مستوى ميلي ثانية يبدو غريبًا.

ربما يجب عليك مراجعة حاجتك أولاً ، ولكن من النادر أن تحتاج إلى أكثر من 6 أو 7 أرقام مهمة ... وأخشى أنك تحاول الحصول على حجم واحد يناسبهم كل شيء مدة.

ربما يجب عليك بدلاً من ذلك تصنيف فتراتك:

  • بضع دقائق على الأكثر> استخدام الدقة المللي ثانية
  • خلاف ذلك> استخدم الدقة الثانية (العدد الشهير منذ 1 يناير 1970)

لأن ... ما هو شعور 1/10 ثانية على مقياس شهرين؟

بديهي. استخدم أعداد صحيحة 64 بت مع رمز خاص بالمنصة للحصول على عدد المللي ثانية. على UNIX بما في ذلك OSX ، تريد gettimeofday. على Windows ، حظًا سعيدًا في الحصول على مصدر وقت موثوق بمللي ثانية. ال رمز في مكتبة TCL للقيام بذلك هو معقد حقا لأن هناك بعض مسكات الشريرة في المنطقة.

الإجابة على 1: إذا كان "توقيت ميلي ثانية" الذي تقيسه أقل من 20 يومًا ، فيمكنك طرح الأوقات كقيم غير موقعة والتحقق من النتيجة كقيمة موقعة. يجب أن يعطي هذا النتيجة الصحيحة مع أجهزة ضبط الوقت الالتفاف (الالتفاف من 0xffffffff إلى 0x00000000). إذا كان توقيتك أكثر من 20 يومًا ، فأنت بحاجة إلى مزيد من البتات.

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