免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
打印 上一主题 下一主题

[C++] C++er看到这么漂亮的js代码,自杀的心都有了(分享不是自己写的一些代码) [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2011-11-16 15:47 |只看该作者
两个线程交互,保证操作修改一个变量始终在同一个线程就行了,如果在两个线程修改同一个变量 ...
egametang 发表于 2011-11-16 15:29


我在想C++能不能包出类似这样的效果,
如果能,就能用类似js的形式,将大量的多线程消息传递藏起来。

除了onCallFinished这里实现的不方便外,
参数传递也是个问题。

  1. for (int i = 0; i < 100; ++i)
  2.         {
  3.                 call( ThreadPoolTest::Max, this, x[i], y[i], &z[i], onCallFinished = function()
  4.                     {
  5.                            //在主线程中执行onCallFinished的函数
  6.                            call( ThreadPoolTest::AnotherFunction, this, x[i], y[i], &z[i], onCallFinished = function()
  7.                            {
  8.                                。。。
  9.                            } );
  10.                     }
  11.                 );
  12.         }
复制代码

论坛徽章:
0
12 [报告]
发表于 2011-11-16 15:56 |只看该作者
我在想C++能不能包出类似这样的效果,
如果能,就能用类似js的形式,将大量的多线程消息传递藏起来。
...
群雄逐鹿中原 发表于 2011-11-16 15:47


那需要语法的支持了,lambda就是干这种事的,不过c++没法隐藏threadpool,c#到是可以
实现你这个需求可以这样改下代码

void Max(int a, int b, int* z, boost::function<void (void)> func)
{
        *z = a > b? a : b;
        func();
}

void OnMaxFinsh() {
  cout << "finish";
}

boost::function<void (void)> callback = boost::bind(OnMaxFinsh);
pool.Schedule(boost::bind(&ThreadPoolTest::Max,
                                                this, x, y, &z,  callback));

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2011-11-16 16:03 |只看该作者
那需要语法的支持了,lambda就是干这种事的,不过c++没法隐藏threadpool,c#到是可以
实现你这个需求可 ...
egametang 发表于 2011-11-16 15:56



    lambda可能是个关键,
boost的lambda本质上是生成仿函的表达式,有复杂点的句子时很难用。

论坛徽章:
0
14 [报告]
发表于 2011-11-16 16:11 |只看该作者
asio库就是全异步的,自己搭配一个线程池就完全可以实现你需要的功能了

https://github.com/egametang/Ega ... er/Cpp/Platform/Rpc
就是用asio配合线程池做的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP