Menghantar Urutan Perintah dan Menunggu Balasan
Komunikasi melalui port bersiri selalunya memerlukan penghantaran urutan arahan dan menunggu jawapan selepas setiap perintah. Ini boleh menjadi satu cabaran, terutamanya jika peranti yang anda berkomunikasi memerlukan masa untuk memproses arahan. Fungsi menyekat, seperti waitForReadyRead(), boleh menghentikan program anda sementara menunggu jawapan.
Masalah dengan Fungsi Menyekat
Isu yang anda hadapi ialah readLines( ) mengembalikan palsu apabila ia tidak menjumpai kata kunci yang dijangkakan dalam tempoh tamat masa tertentu. Ini berlaku apabila peranti menghantar hanya sebahagian kecil daripada respons sebelum tamat masa tamat.
Penyelesaian Tidak Menyekat
Untuk mengatasi masalah ini, anda boleh menggunakan pendekatan yang lebih tak segerak dilaksanakan dengan mesin keadaan. Mesin keadaan membolehkan anda mentakrifkan keadaan berbeza untuk protokol komunikasi anda dan peralihan antara keadaan ini berdasarkan peristiwa tertentu.
Pertimbangkan mesin keadaan berikut:
Anda boleh mencipta mesin keadaan dan mentakrifkan keadaan ini menggunakan Rangka Kerja Mesin Negeri Qt. Fungsi send(), expect(), dan delay() membolehkan anda menghantar arahan, menunggu respons tertentu dan melengahkan peralihan.
Contoh Pelaksanaan
Berikut ialah contoh pelaksanaan mesin keadaan:
class Programmer : public StatefulObject { public: Programmer(QObject *parent = 0) : StatefulObject(parent) { ... send(&s_boot, &serial, "boot\n"); expect(&s_boot, &serial, "boot successful", &s_send, 1000, &s_failed); send(&s_send, &serial, ":HULLOTHERE\n:00000001FF\n"); expect(&s_send, &serial, "load successful", &s_ok, 1000, &s_failed); } ... };
Faedah Menggunakan Negeri Mesin
Menggunakan mesin keadaan memberikan beberapa faedah:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Urutan Perintah Bersiri dan Mengendalikan Respons Secara Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!