免费注册 查看新帖 |

Chinaunix

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

[c++]类和线程怎么结合{有码) [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
51 [报告]
发表于 2012-06-24 22:48 |只看该作者
回复 79# 群雄逐鹿中原

可以用宏么……PLAIN(T,f) (plain<T,&T::f>)……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
52 [报告]
发表于 2012-06-24 22:58 |只看该作者
回复 80# 群雄逐鹿中原

我倒是不觉得恶心或怪异…… 先用function template进行deduce,避免写T[2],顺带获取obj参数[1]……

[1] 因此,还是与thread_create耦合在一起了……
[2] 其实还是有冗余信息
pthread(f).create<&foo:: test1>(&id, NULL);
&foo:: test1 中的foo, 它是f的类型, 如果C++能设计得更科学一些, 应该是不需要写的……

@幻の上帝有什么高招没……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
53 [报告]
发表于 2012-06-24 23:11 |只看该作者
回复 27# sonicling

什么叫对线程进行操作?
原本C提供ADT做成一个C++ class,将与该ADT配套的APIs逐一为之写一个non static member function并转发到原API
我是想不明白这样的代码写着有什么意思,又有什么好处……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
54 [报告]
发表于 2012-06-24 23:22 |只看该作者
回复 28# 群雄逐鹿中原

你还真有耐心……

要是我看到这种极其不对自己胃口的冗长代码,根本就没心思去看。
全文一搜_beginthreadex,哦,没有。
再因为创建线程不是手段 —— 比如向其他进程注入代码,可以通过创建远程线程的方式,这时候创建线程只是达到目的的手段,被创建的线程会做什么是清楚的 —— 代码的目的是为了让代码用户能创建他自己希望的线程, 那么bug无误。


还有,你有没有发现你的问题已经被悄悄的转移了?
LZ需要解决的问题的关键是non static member function -> static member function(or plain C function),是需要作为函数指针(pointer to function)传递给其他函数的。
这根本不是C++ lambda能解决的问题,lambda创建的始终是function object
对抓着一些自己弄不清楚的名词就开始叽叽喳喳的,你耐心过头了……

论坛徽章:
0
55 [报告]
发表于 2012-06-24 23:51 |只看该作者
回复 84# OwnWaterloo


    可以算作object-based设计,就跟MFC一样。这算不算是一种意思?

如果这算是一种强迫症的话,玩模板的通常有更深的强迫症。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
56 [报告]
发表于 2012-06-25 00:06 |只看该作者
sonicling 发表于 2012-06-24 22:15
为什么要把函数指针放在模板参数里?放在函数参数里不是更简洁吗?


函数参数的话,需要通过pthread_create的最后一个参数传递。
放在模板参数里,就可以直接通过 “编译” 途径传递。
于是在这里节省了一个函数参数,可以少用一个semaphore或malloc.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
57 [报告]
发表于 2012-06-25 00:12 |只看该作者
回复 85# OwnWaterloo

又给你看到一个bug,
Win32下面调用CreateThread几乎都可以认为是bug,这个确认无疑。
(几乎表示有例外,此例外不予考虑)

lambda给那小子糊弄过去了,在15楼追问下,是有点怀疑的。


论坛徽章:
0
58 [报告]
发表于 2012-06-25 00:15 |只看该作者
回复 87# 群雄逐鹿中原


    嗯,缺点就是模板参数必须提供不可推导。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
59 [报告]
发表于 2012-06-25 00:30 |只看该作者
OwnWaterloo 发表于 2012-06-24 23:11
我是想不明白这样的代码写着有什么意思,又有什么好处……


这句真是点到痛处了。
好处就是。。除了可以继续隐含用this外, 没有实质好处。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
60 [报告]
发表于 2012-06-25 01:58 |只看该作者
回复 86# sonicling

object-based设计……

如果是从C++开始进行object-based设计,我个人只是不喜欢,还不至于到妄加评论。
但我问题的前提是:在C已经有ADT与对应的一套APIs的情况下。

设计的目的是什么?在此前提下继续再次进行object-based设计又能得到什么?
这只是为设计而设计,就像你说的,强迫症。



玩模板的确实也容易走火入魔。要将特性滥用是很容易的事情。
如果抛开那些耍小聪明的代码,只说特性用到恰到好处的话,模板与object-based本质不同点是:C语言可以胜任object-based,C++在这方面只有少量改进;但C语言无法胜任C++在模板方面的许多工作。
所以C库是有能力完成object-based的设计。回到前提,对这种C库,再次设计一次不会有什么收获,


至于MFC……  那一大堆的成员函数用自己的m_hWnd转发到win32 gui的代码…… 有意思吗…… 尤其是它还有operator HWND……
F(x,args...)的调用就这么难看,难看到值得花大力气 —— 实现的人先花力气写了,然后又让用的人花力气再学一次 —— 将其"封装"成x.F(args...)才行吗……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP