首頁 > 後端開發 > C++ > 主體

如何用 C++ 函數實作非同步程式設計?

WBOY
發布: 2024-04-27 21:09:01
原創
333 人瀏覽過

摘要: C 中的非同步程式設計允許多工處理,無需等待耗時操作。使用函數指標建立指向函數的指標。回調函數在非同步操作完成時被呼叫。 boost::asio 等函式庫提供非同步程式支援。實戰案例示範如何使用函數指標和 boost::asio 實現非同步網路請求。

如何用 C++ 函数实现异步编程?

用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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板