Skip to main content
  1. Posts/

[C++11] promise && future leanrning notes

Note: This article is available in Chinese only. 本文暂无英文版本。 View original
std::promise / std::future(根据正文上下文重绘的示例图,并非遗失原图)

用人话就是,主线程传给附属线程一个promise Object,然后主线程想要获取附属线程set给promise Object的值(也就是该线程返回的某个结果),需要通过主线程中的promise object 得到对应的future object(每个promise 对应一个 future),然后调用future 的get方法。如果附属线程没有执行作为参数传入的promise的set方法去返回结果,那么程序就会block住。

 1   /* ***********************************************
 2   Author :111qqz
 3   mail: renkuanze@sensetime.com
 4   Created Time :2018年08月23日 星期四 10时37分07秒
 5   File Name :future_sample.cpp
 6   ************************************************ */
 7   
 8   #include <iostream>
 9   #include <thread>
10   #include <future>
11    
12   void initiazer(std::promise<int> * promObj)
13   {
14       //std::cout<<"Inside Thread"<<std::endl;     
15       for ( int i = 1 ; i <= 2000000000 ; i++);
16       //promObj->set_value(35);
17   }
18    
19   int main()
20   {
21       std::promise<int> promiseObj;
22       std::future<int> futureObj = promiseObj.get_future();
23       std::thread th(initiazer, &promiseObj);
24       std::cout<<futureObj.get()<<std::endl;
25       th.join();
26       return 0;
27   }
28   

参考资料:

C++11 Multithreading – Part 7: Condition Variables Explained

Related

把二进制文件按字节读到vector中

·1 min
1 std::vector<unsigned char> readFromFile1(const char* filePath) { 2 FILE* file = fopen(filePath, "rb"); 3 std::vector<unsigned char> result; 4 if (file == nullptr) { 5 return result; 6 } 7 8 // 获取文件大小,尽量一次读完 9 size_t fileSize = getFileSize(file); 10 if (fileSize != 0) { 11 result.resize(fileSize); 12 size_t n = fread(&result[0], 1, fileSize, file); 13 assert(n <= fileSize); 14 if (n != fileSize) { 15 result.resize(n); 16 } 17 } 18 19 // 在读取过程当中,有可能文件大小有变化,再尝试读取 20 const size_t read_len = 1024; 21 char buf[read_len]; 22 for (;;) { 23 size_t n = fread(buf, 1, read_len, file); 24 result.insert(result.end(), buf, buf + n); 25 if (n < read_len) { 26 break; 27 } 28 } 29 fclose(file); 30 return result; 31 } 另外一种C++风格,但是性能较差的方法: