C++ 异步编程笔记

                     

贡献者: addis

  • 本文处于草稿阶段。

   和 JavaScript 异步编程类似,C++ 使用异步编程可以执行某个任务而不等其返回就继续执行其他任务。例如读写文件。

#include <iostream>
#include <fstream>
#include <string>
#include <future>

// Function to write data to a file
void writeFile(const std::string& filename, const std::string& data) {
    std::ofstream file(filename);
    if (file.is_open()) {
        file << data;
        file.close();
    } else {
        throw std::runtime_error("Unable to open file");
    }
}

int main() {
    std::string filename = "example.txt";
    std::string data =
        "Hello, this is some text to write in the file asynchronously.";

    // Launch writeFile in an asynchronous manner
    std::future<void> result = std::async(std::launch::async, writeFile,
        filename, data);

    // Do other stuff here if needed
    std::cout << "Writing to the file asynchronously..." << std::endl;

    // Wait for the async task to finish and handle exceptions
    try {
        // This will rethrow any exception caught in the async task
        result.get();
        std::cout << "File written successfully." << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    return 0;
}
其中的 std::launch::async 让系统用另一个线程马上开始处理 writeFile,而如果换成 std::launch::deferred,则只用一个线程,只是等到 .get() 的时候再处理(类似 JS)。无论哪种,std::async() 都会立即返回(non-blocking)而不是任务完成再返回。


致读者: 小时百科一直以来坚持所有内容免费无广告,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 20 元,我们一周就能脱离亏损, 并在接下来的一年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利