Abstrak: Pengaturcaraan tak segerak dalam C++ membolehkan berbilang tugas tanpa menunggu operasi yang memakan masa. Gunakan penunjuk fungsi untuk mencipta penunjuk kepada fungsi. Fungsi panggil balik dipanggil apabila operasi tak segerak selesai. Perpustakaan seperti boost::asio menyediakan sokongan untuk pengaturcaraan tak segerak. Kes praktikal menunjukkan cara menggunakan penunjuk fungsi dan boost::asio untuk melaksanakan permintaan rangkaian tak segerak.
Pengaturcaraan Asynchronous dengan Fungsi C++
Pengenalan
Asynchronous Programming ialah paradigma pengaturcaraan yang membenarkan atur cara melaksanakan tugasan lain sementara menunggu operasi rangkaian, untuk menyelesaikan permintaan operasi rangkaian, seperti memakan masa. Dalam proses ini, fungsi panggil balik akan dipanggil selepas operasi selesai tanpa program menunggu secara eksplisit. Dalam C++, pengaturcaraan tak segerak boleh dilaksanakan menggunakan penunjuk fungsi dan perpustakaan berkaitan.
Penunjuk fungsi
Penunjuk fungsi dalam C++ ialah penuding kepada fungsi. Kita boleh mencipta penuding fungsi daripada nama fungsi seperti ini:
int add(int a, int b) { return a + b; } using AddFunction = int(*)(int, int); AddFunction addPtr = &add;
addPtr
kini adalah penunjuk fungsi yang menunjuk ke fungsi add
. addPtr
现在是一个函数指针,指向 add
函数。
回调函数
回调函数是一个在某些事件发生时调用的函数。当一个异步操作完成时,系统会调用相应的回调函数。例如,以下函数将在网络请求完成时被调用:
void networkCallback(const std::string& data) { // 使用 data 进行处理 }
异步库
C++ 中有很多库支持异步编程。其中一个流行的选择是 boost::asio
。此库提供了许多用于创建和管理异步操作的类和函数。
实战案例
让我们创建一个简单的示例来演示如何使用函数指针和 boost::asio
#include <boost/asio.hpp> #include <iostream> using namespace boost::asio; // 回调函数 void networkCallback(const boost::system::error_code& error, boost::array<char, 1024> data) { if (!error) { std::cout << data.data() << std::endl; } else { std::cout << "Error: " << error.message() << std::endl; } } int main() { using namespace std::placeholders; // 创建 IO 服务 io_service service; // 创建 IP 协议套接字 ip::tcp::socket socket(service); // 连接到服务器 socket.connect( ip::tcp::endpoint(ip::address::from_string("127.0.0.1"), 8080)); // 发送请求 std::string request = "GET / HTTP/1.1\r\n\r\n"; std::async_write(socket, buffer(request), networkCallback, _1); service.run(); return 0; }
boost::asio
. Pustaka ini menyediakan banyak kelas dan fungsi untuk mencipta dan mengurus operasi tak segerak. 🎜🎜🎜Kes praktikal🎜🎜🎜Mari kita buat contoh mudah untuk menunjukkan cara menggunakan penunjuk fungsi dan boost::asio
untuk melaksanakan permintaan rangkaian tak segerak: 🎜rrreeeAtas ialah kandungan terperinci Bagaimana untuk melaksanakan pengaturcaraan tak segerak dengan fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!