Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Melaksanakan Mesin Negeri dengan Cekap dalam C Menggunakan Teknik yang Dicuba-dan-Diuji?

Bagaimanakah Saya Boleh Melaksanakan Mesin Negeri dengan Cekap dalam C Menggunakan Teknik yang Dicuba-dan-Diuji?

Susan Sarandon
Susan Sarandonasal
2024-12-31 16:43:10302semak imbas

How Can I Efficiently Implement State Machines in C Using Tried-and-Tested Techniques?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn