Mekanisme dipacu peristiwa dalam pengaturcaraan serentak bertindak balas kepada peristiwa luaran dengan melaksanakan fungsi panggil balik apabila peristiwa berlaku. Dalam C++, mekanisme dipacu peristiwa boleh dilaksanakan menggunakan penunjuk fungsi: penunjuk fungsi boleh mendaftarkan fungsi panggil balik untuk dilaksanakan apabila peristiwa berlaku. Ungkapan Lambda juga boleh melaksanakan panggilan balik acara, membenarkan penciptaan objek fungsi tanpa nama. Kes praktikal menggunakan penunjuk fungsi untuk melaksanakan peristiwa klik butang GUI, memanggil fungsi panggil balik dan mencetak mesej apabila peristiwa itu berlaku.
Mekanisme fungsi C++ dipacu peristiwa dalam pengaturcaraan serentak
Pengenalan
Pacuan peristiwa ialah paradigma pengaturcaraan serentak di mana urutan atau proses untuk melaksanakan operasi luaran tertentu. Dalam C++, mekanisme dipacu peristiwa biasanya dilaksanakan melalui penggunaan penunjuk fungsi atau ungkapan lambda.
Melaksanakan acara menggunakan penunjuk fungsi
Penunjuk fungsi ialah penunjuk kepada fungsi yang membolehkan anda menghantar fungsi sebagai parameter kepada fungsi lain. Dalam pengaturcaraan dipacu peristiwa, anda menggunakan penunjuk fungsi untuk mendaftarkan fungsi panggil balik yang akan dilaksanakan apabila peristiwa tertentu berlaku.
void RegisterEventCallback(const std::function<void()>& callback) { // 将 callback 添加到回调函数列表 }
RegisterEventCallback([]() { std::cout << "事件发生了!" << std::endl; });
Dalam contoh ini, fungsi RegisterEventCallback
menerima sebagai hujah penunjuk fungsi yang menunjuk kepada fungsi panggil balik yang dilaksanakan apabila peristiwa itu berlaku.
Gunakan ungkapan lambda untuk melaksanakan acara
Ekspresi lambda membolehkan anda mencipta objek fungsi tanpa nama tanpa mentakrifkan nama fungsi secara eksplisit. Ia boleh digunakan bersama-sama dengan penunjuk fungsi untuk melaksanakan panggilan balik acara.
RegisterEventCallback([] { std::cout << "事件发生了!" << std::endl; });
Kes praktikal
Berikut ialah contoh mudah untuk melaksanakan aplikasi GUI dipacu peristiwa dalam C++ menggunakan penunjuk fungsi:
#include <iostream> #include <vector> #include <memory> class Button { public: using ButtonCallback = std::function<void(Button*)>; Button(const std::string& name) : name_(name) {} void Click() { for (const auto& callback : callbacks_) { callback(this); } } void AddClickCallback(const ButtonCallback& callback) { callbacks_.push_back(callback); } private: std::string name_; std::vector<ButtonCallback> callbacks_; }; class GUI { public: GUI() { // 创建两个按钮 buttons_.push_back(std::make_unique<Button>("Button 1")); buttons_.push_back(std::make_unique<Button>("Button 2")); } void Run() { // 注册按钮点击回调 buttons_[0]->AddClickCallback([](Button* btn) { std::cout << "Button " << btn->GetName() << " clicked!" << std::endl; }); buttons_[1]->AddClickCallback([](Button* btn) { std::cout << "Button " << btn->GetName() << " clicked!" << std::endl; }); // 模拟按钮点击事件 buttons_[0]->Click(); buttons_[1]->Click(); } private: std::vector<std::unique_ptr<Button>> buttons_; }; int main() { GUI gui; gui.Run(); return 0; }
Program ini mencipta GUI dengan dua butang. Apabila sebarang butang diklik, fungsi panggil balik yang dikaitkan dengan butang itu dipanggil dan mesej dicetak dalam konsol.
Atas ialah kandungan terperinci Apakah mekanisme dipacu peristiwa bagi fungsi C++ dalam pengaturcaraan serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!