Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melaksanakan Mesin Negeri dengan Cekap dalam C Menggunakan Teknik yang Dicuba-dan-Diuji?
C State-Machine Design: Teknik Perlaksanaan Dicuba-dan-Diuji
Dalam perbincangan ini, kami meneroka teknik yang telah dicuba dan diuji untuk mereka bentuk mesin keadaan dalam C.
Struct Array dan Gelung Pendekatan
Pendekatan biasa melibatkan penggunaan pelbagai struktur untuk mewakili mesin keadaan. Setiap struktur mengandungi keadaan semasa, peristiwa dan fungsi yang mengira keadaan seterusnya.
typedef struct { int st; int ev; int (*fn)(void); } tTransition;
Operasi Didorong Peristiwa
Mesin keadaan beroperasi dengan mengendalikan peristiwa . Gelung acara secara berterusan menyemak acara dan mencari peralihan yang sepadan dalam tatasusunan peralihan.
while (state != ST_TERM) { event = GetNextEvent(); for (i = 0; i < TRANS_COUNT; i++) { if ((state == trans[i].st) || (ST_ANY == trans[i].st)) { if ((event == trans[i].ev) || (EV_ANY == trans[i].ev)) { state = (trans[i].fn)(); break; } } } }
Wildcards for Flexibility
Wildcards (ST_ANY dan EV_ANY) boleh digunakan untuk mengendalikan acara yang sah di mana-mana negeri atau di mana-mana acara.
Lulus Struktur untuk Mesin Berbilang
Untuk mengelakkan pembolehubah global untuk mesin keadaan berbilang, penunjuk struktur boleh dihantar ke semua fungsi, membolehkan setiap mesin mengekalkan keadaannya sendiri.
Kesimpulan
Teknik ini menyediakan asas yang kukuh untuk mereka bentuk mesin keadaan yang cekap dan boleh diselenggara dalam C. Walau bagaimanapun, adalah penting untuk mempertimbangkan keperluan khusus setiap projek dan meneroka sumber tambahan serta teknik lanjutan mengikut keperluan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Mesin Negeri dengan Cekap dalam C Menggunakan Teknik yang Dicuba-dan-Diuji?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!