Update item39.md

This commit is contained in:
猫耳堀川雷鼓 2021-03-15 21:00:19 +08:00 committed by GitHub
parent 91d728cd0b
commit 062e83b745
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -104,7 +104,7 @@ cv.notify_one(); //通知反应任务第2部分
方案很简单。检测任务有一个`std::promise`对象(即通信信道的写入端),反应任务有对应的*future*。当检测任务看到事件已经发生,设置`std::promise`对象(即写入到通信信道)。同时,反应任务。`wait`会锁住反应任务直到`std::promise`被设置。
现在,`std::promise`和*futures*(即`std::future`和`std::shared_future`)都是需要类型参的模板。形参表明通过通信信道被传递的信息的类型。在这里,没有数据被传递,只需要让反应任务知道它的*future*已经被设置了。我们在`std::promise`和*future*模板中需要的东西是表明通信信道中没有数据被传递的一个类型。这个类型就是`void`。检测任务使用`std::promise<void>`,反应任务使用`std::future<void>`或者`std::shared_future<void>`。当感兴趣的事件发生时,检测任务设置`std::promise<void>`,反应任务在*future*上`wait`。尽管反应任务不从检测任务那里接收任何数据,通信信道也可以让反应任务知道,检测任务什么时候已经通过对`std::promise<void>`调用`set_value`“写入”了`void`数据。
现在,`std::promise`和*futures*(即`std::future`和`std::shared_future`)都是需要类型参的模板。形参表明通过通信信道被传递的信息的类型。在这里,没有数据被传递,只需要让反应任务知道它的*future*已经被设置了。我们在`std::promise`和*future*模板中需要的东西是表明通信信道中没有数据被传递的一个类型。这个类型就是`void`。检测任务使用`std::promise<void>`,反应任务使用`std::future<void>`或者`std::shared_future<void>`。当感兴趣的事件发生时,检测任务设置`std::promise<void>`,反应任务在*future*上`wait`。尽管反应任务不从检测任务那里接收任何数据,通信信道也可以让反应任务知道,检测任务什么时候已经通过对`std::promise<void>`调用`set_value`“写入”了`void`数据。
所以,有