cpp 并发编程小计
来源:互联网 发布:dc最强反派知乎 编辑:程序博客网 时间:2024/05/18 15:52
Cpp 并发编程小计
大都是搬运,算是参考时方便些
1.1 在类中使用 pthread,不是 static 的方法很难使用,找了个方法。可是很丑陋。
1.2 直接使用 std::thread使用 this第一次没仔细看, 发现可以直接使用类的非 static 类。话说,当初为嘛没看出来…
1.3 再进一步
用C++11的std::async代替线程的创建
1.4 C++ 多线程下的: error C3867: 使用 “&” 来创建指向成员的指针
“&” 同样适用于 async
1.5 实例程序
#include <iostream>//#include <thread>#include <future>using namespace std;class HelloWorld{public: bool init(); int myThread(int first, int second);};bool HelloWorld::init(){ //std::thread t1(&HelloWorld::myThread, this, 10, 20);//创建一个分支线程,回调到myThread函数里 //t1.join(); ////t1.detach(); std::future<int> f1 = std::async(std::launch::async, &HelloWorld::myThread, this, 1, 2); cout << f1.get() << endl; //output: 8 printf("in major thread");//在主线程 return true;}int HelloWorld::myThread(int first, int second){ printf("in my thread,first = %d,second = %d", first, second); return first + second;}int main(){ HelloWorld hello; hello.init(); return 0;}
1.6 小结
使用 async 可以获得我们想要的 – 同步,且能获取返回值
1.7 还是用的太少了,出现了 “error C2064: term does not evaluate to a function taking 0 arguments” 错误。下面的代码很好的说明了出现的问题
#include <iostream>#include <thread>using namespace std;int plainHello(){ cout << "hello is always ok" << endl; return 0;}class Hello{public: Hello(){}; ~Hello(){}; void say(){ cout << "hei in hello" << endl; } static void staticSay(){ cout << "static say is also ok" << endl; }};int main(){ thread t1(plainHello); //直接调用不会有问题 t1.join(); //thread t2(&Hello::say); //编译出错,error C2064: term does not evaluate to a function taking 0 arguments。是说没有提供类的实例 //t2.join(); Hello hello; thread t3(&Hello::say, &hello); //提供了类的实例,可以正确找到调用的方法 t3.join(); thread t4(&Hello::staticSay); //静态方法,不提供类的实例 t4.join(); return 0;}
0 0
- cpp 并发编程小计
- [笔试] 编程练习小计
- python编程小计
- 编程错误及问题小计
- 小计
- 小计
- cpp 的编程风格
- ICE 编程 client.cpp
- 并发编程--并发集合
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- 并发编程
- Android轻松实现流式布局之FlowLayout
- Win10中使用CMD命令遍历文件夹去除多余后缀名
- <css 十四>关于css的对齐方式
- 动态添加表单元素,并使用bootstrapValidator插件进行动态添加校验
- 用dom4j解析xml文件
- cpp 并发编程小计
- 微信防盗链处理
- 逻辑与和逻辑或运算符返回值
- 基于nginx tomcat redis分布式web应用的session共享配置
- 默认建立的myeclipse web工程无法运行
- [转载]spark算子介绍
- 二叉树第K层节点个数 -- 采用递归和非递归方法
- C语言中可变参数的用法
- php base64图片上传