كيف ينام أو وقفة PThread في ج على لينكس
سؤال
وأنا تطوير تطبيق في أي أنا لا خاصية تعدد. واحدة من بلدي المواضيع عامل يعرض الصور على القطعة. موضوع آخر يلعب الصوت. أريد أن وقف / تعليق / وقفة / النوم على المواضيع في هذا الحدث نقرة زر. وهو نفس عندما كنا انقر على الفيديو لاعب زر التشغيل / الإيقاف المؤقت. أنا وضع طلبي في ج ++ على منصة لينكس باستخدام مكتبة pthread للخيوط.
ويمكن لأي شخص أن يقول لي كيف يمكنني تحقيق المواضيع وقفة / تعلق؟
المحلول
ويمكنك استخدام مزامنة، متغير حالة، ومتغير العلم مشتركة للقيام بذلك. دعونا نفترض هذه هي محددة عالميا:
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int play = 0;
هل يمكن هيكلة كود التشغيل الخاصة بك مثل هذا:
for(;;) { /* Playback loop */
pthread_mutex_lock(&lock);
while(!play) { /* We're paused */
pthread_cond_wait(&cond, &lock); /* Wait for play signal */
}
pthread_mutex_unlock(&lock);
/* Continue playback */
}
وبعد ذلك، للعب يمكنك القيام بذلك:
pthread_mutex_lock(&lock);
play = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
وإلى وقفة:
pthread_mutex_lock(&lock);
play = 0;
pthread_mutex_unlock(&lock);
نصائح أخرى
لديك المواضيع استطلاع الرأي الخاص بك ل "رسائل" من واجهة المستخدم على فترات منتظمة. وبعبارة أخرى، UI في الرسائل المشاركات التي عمل موضوع واحد إلى المواضيع عامل على سبيل المثال الصوت / الفيديو.