Perpustakaan C ++ Menyediakan fungsionalitas Loop Acara untuk Memproses Acara Secara Instan dan Terjadwal untuk Aplikasi yang Didorong Acara
Acara Loop memproses acara untuk memberi tahu penerima terdaftar secara opsional dengan data
Anda dapat menggunakan Loop Event untuk memblokir utas saat ini untuk pemrosesan acara atau sebagai utas independen meninggalkan utas saat ini gratis untuk tugas lain
CATATAN: Perpustakaan ini menyediakan kerangka kerja untuk proses acara multi-threaded dalam proses yang sama tanpa kemampuan IPC
EventLoop::Mode::BLOCK Mode Loop Acara ini akan memblokir utas saat ini (biasanya utas utama) di mana panggilan EventLoop::Run() telah dikeluarkan
Utas saat ini kemudian akan melanjutkan pemrosesan acara selama loop berjalan
EventLoop::Mode::NON_BLOCK Mode ini akan menjalankan loop event di utas lain yang akan mencegah utas saat ini di mana EventLoop::Run() panggilan telah dikeluarkan dari diblokir
Ini dapat terbukti bermanfaat di mana utas saat ini harus mencapai beberapa eksekusi setelah memulai loop acara pada utas yang sama atau jika sudah menggunakan loop acara pemblokirannya sendiri. Contoh yang terakhir dapat berupa QGuiApplication::exec() yang memblokir utas utama dan mulai memproses acara
Itu menimbulkan pertanyaan penting: Mengapa loop peristiwa sekunder diperlukan ketika yang utama seperti exec() sudah ada?
Saya tidak tahu tentang Anda tetapi saya sangat melewatkan beberapa fitur dalam loop acara QT seperti kemampuan untuk menyiarkan sinyal untuk semua penerima yang telah mendaftar/berlangganan. Ini adalah motivasi utama untuk mengembangkan perpustakaan loop acara dari awal, selain beberapa orang lain seperti keingintahuan saya yang tak pernah puas tentang cara kerja dan gatal untuk dogfooding!
Penyiaran sangat penting ketika Anda menginginkan beberapa komponen aplikasi untuk bertindak berdasarkan stimulus tunggal tanpa harus menghubungkan setiap penerima dengan penjelasan pengirim. Semoga berhasil menyampaikan contoh pengirim ke beberapa pemulung dan membuat koneksi slot sinyal untuk masing -masing untuk mengaktifkan penerimaan siaran di QT!
Alasan lain yang solid adalah untuk membuat sistem pemrosesan acara global untuk seluruh aplikasi tanpa referensi ke penyedia acara atau objek pengirim dan penerima terkait untuk mendaftar dan memicu suatu acara. EventLoop adalah kelas statis mandiri dengan metode statis yang memungkinkan pengembang untuk mengeluarkan panggilan API dari utas apa pun, di mana saja dalam kode tidak seperti di QT di mana pegangan objek pengirim dan penerima diperlukan untuk membuat koneksi dan memancarkan sinyal.
Sebagai pengguna, Anda dapat secara dinamis menautkan pustaka loop acara ke aplikasi Anda dan menyertakan header EventLoop.h dalam kode aplikasi Anda untuk mengakses metode perpustakaan. Karena kami menggunakan Event sebagai jenis khusus untuk mengirimkan dan menerima acara dengan nama dan data, header Event.h akan diperlukan dalam file sumber yang mengambil detail tersebut dari acara yang masuk
Catatan: Jangan termasuk header lain dari direktori termasuk proyek ini selain dari yang disebutkan di atas saat menggunakan perpustakaan di aplikasi Anda. Cara lain untuk diingat adalah bahwa Anda hanya membutuhkan file header
.huntuk aplikasi Anda dan semua file.hppdapat diabaikan
Dokumentasi API terperinci dapat ditemukan di header EventLoop.h . Langkah -langkah berikut menunjukkan kemungkinan penggunaan loop acara dalam aplikasi Anda:
main() dari program Anda, hubungi EventLoop::SetMode() metode jika Anda ingin loop menjadi tidak blocking. Tidak perlu memanggil ini secara eksplisit untuk mode pemblokiran karena itu adalah mode defaultEventLoop::Run() di main() di mana Anda ingin loop acara memulai dan/atau blokEvent* Di kelas atau file sumber apa pun dengan EventLoop::RegisterEvent() di mana Anda ingin diberi tahu untuk suatu acara. Biasanya pendaftaran dilakukan dalam konstruktor kelas dengan lambdas atau fungsi anggota kelas sebagai penanganEventLoop::TriggerEvent() dan penangan yang sesuai yang terdaftar untuk nama acara tertentu akan dipanggil baik secara instan atau setelah waktu tunggu tergantung pada jenis kelebihan yang digunakan yang digunakan digunakan digunakanEvent Event::getName() dan Event::getData() MetodeEventLoop::Halt() . Metode ini dapat dipanggil dari utas apa pun dalam kedua mode. Jika dipanggil di dalam pawang terdaftar, itu akan berlaku hanya pada penyelesaian ruang lingkup pawangKiat: Jika Anda berencana untuk menggunakan
EventLoopdi atas loop acaraexec()QT, aturEventLoop::Run()sebelum panggilanexec()danEventLoop::Halt()untuk diminta padaQGuiApplication::aboutToQuitsinyal sebagai berikut untuk keluar anggun dengan anggun
QObject::connect(&app, &QGuiApplication::aboutToQuit, []{ EventLoop::Halt(); });
Catatan: Kode apa pun setelah panggilan pemblokiran
EventLoop::Run()di utas yang sama tidak akan dijalankan sampai loop acara dihentikan karenaEventLoop::Run()memblokir utas saat ini untuk memproses acara berdasarkan desain.
Aplikasi keranjang belanja berfungsi sebagai referensi penggunaan perpustakaan dan API ini. Jika ada pertanyaan atau klarifikasi, Anda dapat menghubungi saya di [email protected]
Periksa rilis stabil terbaru dari perpustakaan di bawah Releases tetapi jika Anda ingin membangun perpustakaan dari sumber dengan versi kode sumber saat ini, jalankan skrip build.sh
Skrip dapat dijalankan tanpa opsi apa pun. Default untuk setiap opsi akan muncul di {} dalam instruksi penggunaan. Pelajari tentang penggunaan skrip dengan menjalankan perintah berikut
./build.sh -h
Sebagai contoh, jika Anda ingin menggunakan skrip untuk membangun mode pelepasan dengan Unix Makefiles cmake generator, skrip dapat dieksekusi sebagai berikut
./build.sh -a -r -g "Unix Makefiles"
Bangun artefak akan dihasilkan di direktori build
Artefak keluaran akan hadir di direktori lib sebagai libEventLoop.so yang dapat ditautkan atau dipindahkan ke tujuan target Anda
Anda dipersilakan untuk berkontribusi pada proyek jika Anda berpikir
Sebagai kontributor potensial, Anda bisa
Jangan hubungi saya jika ada pertanyaan atau saran [email protected]