摘要: C 中的非同步程式設計允許多工處理,無需等待耗時操作。使用函數指標建立指向函數的指標。回調函數在非同步操作完成時被呼叫。 boost::asio 等函式庫提供非同步程式支援。實戰案例示範如何使用函數指標和 boost::asio 實現非同步網路請求。
用C 函數實作非同步程式設計
簡介
##非同步程式設計是一種程式設計範式,它允許程式在等待耗時操作(例如網路請求)完成時執行其他任務。在這個過程中,回調函數將在操作完成後被調用,無需程式明確等待。在 C 中,非同步程式設計可以使用函數指標和相關的函式庫來實現。函數指標
C 中的函數指標是指向函數的指標。我們可以透過函數的名稱建立一個函數指針,如下所示:int add(int a, int b) { return a + b; } using AddFunction = int(*)(int, int); AddFunction addPtr = &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; }
以上是如何用 C++ 函數實作非同步程式設計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!