手撸HTTP是理解HTTP的最好方式(5)

创建于 2020-08-06,完成于 2020-08-07

在之前的课程(四)中我们讲了有关如何套用 socket 实现 bufReader,并在此基础上读取 http 请求和返回值。

今天的任务是 “[易]实现主程序逻辑,监听端口,接收请求”。

所有的代码都在 https://github.com/dashjay/http_demo/tree/5-main-work

Let’s do it

0x1 多线程编程

作者对多线程编程了解不是很多,基本上就是在此场景下够用而已。

multi_thread

#include <iostream>
#include <thread>

void thread_sleep(int second) {
   
    std::this_thread::sleep_for(std::chrono::seconds(second));
    std::cout << "thread exit" << '\n';
}

int main() {
   
    std::thread thr(thread_sleep, 5);
    thr.join();

    std::thread thr2(thread_sleep, 999);
    thr2.detach();
    std::cout << "program exit directly" << '\n';
}

注意几个点:

  1. thread创建的时候,参数可以直接从第二个参数开始传入
  2. 创建好的线程可以由两种行为
    • join 然后阻塞等待线程结束
    • detach 然后立刻回到当前执行语句下方开始执行。
    • 什么也不做,当主线程结束时,子线程未执行结束,离开作用域时,会报错 libc++abi.dylib: terminating 并且返回 exit_code: 6

更多的内容我也不知道了,这些知识都是从python库那边迁移过来的,更多请查询百科。

0x2 匿名函数

我说这是和函数你信不?

[]() {
   }();

这确实是个函数(无返回值的lambda)可以分为三个部分。

  • []:我经常叫它捕获列表
  • (): 是参数列表
  • {}: 函数语句

最后一个括号是执行的意思

// 无参数 无返回值 的lambda表达式
[]() {
   
    std::cout << "hello lambda" << '\n';
}();

int num = 5;
// 有参数 无返回值 的lambda表达式
[](int a) {
   
    std::cout << a << '\n';
}(num);

// 有参数 有返回值 的lambda表达式
auto res = [](int a) -> int {
   
    return ++a;
}(num);
std::cout << "res: " << res << '\n';

// 捕获列表
auto
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值