C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Linux 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) GCC 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) std::thread 问题(Question): 最近在实作multithread的时候遇到了一些问题 以下是程式码,main function呼叫的函式会呼叫两条thread帮忙做两个加法运算 https://pastebin.com/GHn0WWmP 执行output结果是预期的37或73没有问题 但当如果要呼叫thread的函式是class member function的时候就会compiler error https://pastebin.com/E5vxyxXW 以下是我自己环境(GCC 4.8.5)的报错 https://pastebin.com/nNem1nAv 我用线上编译器onlinegdb.com试的error如下: error: invalid use of non-static member function ‘void ATPG::test(int, int)’ 稍微google一下有找到这篇类似问题的解法 https://thispointer.com/c11-start-thread-by-member-function-with-arguments/ 但这篇的使用情境是在main function中开一条thread呼叫class member function 我的使用情境是class member function开thread呼叫其他class member function 用上述网站的解法一样会有很多error 想请问前辈们这种使用情境下该怎麽呼叫thread比较正确 还是这其实是错误的使用方式,应该要在main function中开thread比较正确呢? 抱歉比较少multithread的coding经验,麻烦前辈们赐教了,谢谢! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.129.130.157 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1623189517.A.821.html
1F:→ Lipraxde: 用你查到的那篇的方法啊,是有什麽 error?06/09 06:48
2F:→ chengcti: class member 前面加上 static06/09 09:09
3F:→ chengcti: class 还没建立 传进去可能会变成存取不存在的记忆体 06/09 09:10
4F:→ chengcti: 所以一定要是class06/09 09:10
5F:→ chengcti: static member06/09 09:10
感谢两位,仔细检查後用那篇的方法重新再写了一次没有thread相关的error了 也谢谢c大的解释,对为何要这样用的原因也有比较了解了 -- 但我在把要用thread呼叫的function改成static member之後又会遇到两个问题 附上稍微复杂一点的code: https://pastebin.com/3pJVVmV4 1. 呼叫的function还有呼叫其他function(第32行),就会出现以下error error: cannot call member function ‘void ATPG::tdf_pfFsim_all_fault(int, int, int)’ without object 2. 呼叫的function如果有用到class data member(第29,30行)也会出现error error: invalid use of member ‘ATPG::_piPattern’ in static member function 3. 如果class data member有在constructor初始化(第7行)也会出现error error: ‘int ATPG::_faultCount’ is a static data member; it can only be initialized at its definition 1.的部分把32行呼叫的function也改宣告成static可以解掉error 但这个function也会呼叫其他member function,要全部都宣告成static才不会有error 请问这是正确的解决方式吗?还是有更好的解法 2.3.的部分我也是把data member改成static 但如果有在constructor初始化遇到的error我就不会解决了QQ 不知道有没有更合适的解决方式,谢谢! ※ 编辑: skyHuan (220.129.130.157 台湾), 06/09/2021 12:42:57 ==
6F:推 flarehunter: Google "c++ std::thread class method" 第一篇06/09 12:07
7F:→ flarehunter: shorturl.at/frstM06/09 12:10
https://stackoverflow.com/questions/10998780/stdthread-calling-method-of-class 这篇的方法可以解决!也不会有上面static function的後续问题 感觉是比较适合的作法,感谢f大 ==
8F:→ Lipraxde: 你是第一次写 C++?06/09 13:45
9F:→ Lipraxde: 错误讯息都有,文章里也有介绍,花点时间看不好吗?06/09 13:46
10F:→ sarafciel: 你原本那篇文章是有你要的解的 这边你要自己学会变通 06/09 13:58
C++确实没有到非常熟,thread也是第一次使用 有试着自己搜寻跟除错了,也有先理解并简化问题才上来发问 可能因为比较赶还没真的花很多时间仔细研究就上来发问 下次会自己多花时间多注意的,谢谢两位前辈指教 ※ 编辑: skyHuan (223.137.86.106 台湾), 06/09/2021 16:37:08
11F:→ Lipraxde: 其实你一开始就有找到答案了,比较熟 C++ 後可以再回来 06/09 22:00
12F:→ Lipraxde: 看看最初的盲点,加油吧~ 06/09 22:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP