c++ - كيفية الانتظار بكفاءة ل كتس أو دسر من RS232 في لينكس؟




linux serial-port (2)

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

حاليا، أنا قراءة إشارات كتس و دسر من المنفذ التسلسلي على النحو التالي:

bool get_cts(int fd) {
    int s;
    ioctl(fd, TIOCMGET, &s);
    return (s & TIOCM_CTS) != 0;
}

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

void wait_cts(int fd) {
    while(1) {
        if(get_cts(fd)) {
             return;
        }
    }
}

هل هناك حل أفضل باستخدام C أو C ++ على لينوكس؟ (لا أستطيع استخدام أي مراقبة تدفق الأجهزة كما أنني لا تحتاج إلى خطوط البيانات التسلسلية على الإطلاق.)


هناك TIOCMIWAIT الذي يمنع حتى مجموعة معينة من الإشارات تغيير.

للأسف هذا إيوكتل غير موثقة في tty_ioctl(4) الصفحة ولا في ioctl_list(4) .

لقد تعلمت عن هذا إوكتل في هذا السؤال:

بيثون رصد المنفذ التسلسلي (رس-232) إشارات المصافحة





wait