سؤال

لذلك لدي TimerTask task استدعاء وظيفة onTimerComplete() في لها run()

onTimerComplete() يبدو شيئا مثل هذا:

private void onTimerComplete(){
  myFunc1();
  myFunc2();
}

أقوم بإجراء Timer t وأنا جدولة TimerTask مع t.schedule(task, 2000);

المشكلة هي، عندما يكون الموقت مستيقظا والمهمة تعمل onTimerComplete() ولكن هذه الوظيفة لا تنتهي. إنه يركض myFunc1() ولكن لا تنهي أبدا ولا يدعو myFunc2()

ومع ذلك، إذا اتصلت onTimerComplete() مباشرة، كل شيء يعمل.

ما هي الصفقة هنا؟

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

المحلول

إذا myFunc1() يبدأ، ولكن لا تنتهي أبدا، فمن المرجح أن تكون المشكلة في هذه الوظيفة.

يجب أن تكون على دراية بأن هذه الوظيفة سيتم استدعاؤها في مؤشر ترابط منفصل. هناك احتمال وجود نوع من التفاعل غير المرغوب فيه بين مؤشر ترابطين. فيالوصف هنا.)

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

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