لتحقيق تأخير زمني دقيق بدون استخدام Thread.sleep()
في تطبيقك، يمكنك استخدام System.Diagnostics.Stopwatch
لقياس مدى الزمن وتحقيق التأخير. هناك أيضًا أسلوب آخر يستخدم ManualResetEvent
لتحقيق التأخير. فيما يلي كيفية تنفيذ هذه الطرق:
-
System.Diagnostics.Stopwatch
:
استخدمStopwatch
لقياس مدى الزمن وتنفيذ التأخير بشكل دقيق. فيما يلي كيفية استخدامه:مقالات ذات صلة-
فهم التعبيرات المنتظمة في Java04/04/2024
-
تحويل وقت Visual C++ إلى ميلي ثانية03/04/2024
-
ريادة الأعمال 10107/11/2023
csharpStopwatch stopwatch = new Stopwatch(); stopwatch.Start(); for (n = 0; n <= m; n++) { // Show data // Wait for 30 seconds while (stopwatch.ElapsedMilliseconds < 30000) { // Waiting... } // Reset the stopwatch for the next iteration stopwatch.Restart(); } stopwatch.Stop();
-
-
ManualResetEvent
:
يمكنك استخدامManualResetEvent
لتأخير التكرار بشكل دقيق. فيما يلي كيفية تنفيذ ذلك:csharpManualResetEvent resetEvent = new ManualResetEvent(false); for (n = 0; n <= m; n++) { // Show data // Wait for 30 seconds resetEvent.WaitOne(30000); // Reset the event for the next iteration resetEvent.Reset(); }
يجب تهيئة
ManualResetEvent
في البداية:csharpresetEvent.Set(); // للسماح بالتأخير في البداية
وتأكد من استدعاء
Set()
بعد انتهاء الوقت المحدد لكل تكرار.تأكد من استبدال
// Show data
بالكود الخاص بعرض البيانات وأن تضع الكود الخاص بإعادة ضبط الـ stopwatch أو الـ ManualResetEvent في المكان الصحيح داخل الحلقةfor
.
المزيد من المعلومات
لتعميق المعرفة في هذا الموضوع، يمكن ذكر المزيد من المعلومات حول كيفية استخدام ManualResetEvent
لتحقيق التأخير الدقيق:
ManualResetEvent
هو نوع من أنواع الـ events في C#، يمكن استخدامه للسماح بتزامن الأحداث بين الخيوط. عند استخدام ManualResetEvent
لتحقيق تأخير، يمكن تعيينه ليكون مفتوحًا (set)، مما يسمح للكود بالمرور دون تأخير، ثم يمكن إعادة تعيينه ليكون مغلقًا (reset) مجددًا لتحقيق التأخير في المرة القادمة.
في الشيفرة السابقة، تم استخدام ManualResetEvent
للسماح بتنفيذ الحلقة for
بشكل فعال، حيث ينتظر البرنامج لمدة 30 ثانية بعد كل تكرار قبل الانتقال إلى التكرار التالي. WaitOne(30000)
تقوم بتعليق الخيط الحالي لمدة 30 ثانية، ثم يتم استئناف التنفيذ بعد انقضاء هذه المدة.
يمكن استخدام ManualResetEvent
لأغراض أخرى أيضًا، مثل التنبيه عند اكتمال عملية معينة في خيط آخر أو لتزامن عمليات متعددة في تطبيقات متعددة الخيوط.