各种莫名其妙的访问冲突,加上 Sleep();后就好了,时间也不一定相等,有的 50 就够了,有的要 200。虽然一两个没什么感觉,但是多了感觉程序好慢。
想起了 C++从入门到放弃,我现在好难受。。。
1
whypool 2017-12-14 16:46:17 +08:00
C 加加
|
2
exch4nge 2017-12-14 16:47:57 +08:00
LZ 找安慰的话,告诉楼主 C++ 算是我从零开始到基本入门用的时间最长语言,还是比较难学的,楼主加油。
LZ 如果想解决具体问题,可以把具体情况写出来,只听描述无法给什么技术上的建议。 |
3
acgnsstech 2017-12-14 16:48:56 +08:00
建议学 Q#
|
4
kirigaya 2017-12-14 16:56:14 +08:00
多线程编程?
|
5
sbw 2017-12-14 16:56:45 +08:00
访问冲突是什么,data race ?
|
6
DOLLOR 2017-12-14 16:59:06 +08:00
Rust 欢迎你
|
7
kexming250 2017-12-14 16:59:31 +08:00
具体问题?
|
8
owenliang 2017-12-14 17:03:29 +08:00
学生党不踏实学习,竟然"sleep"。
|
9
wevsty 2017-12-14 17:05:03 +08:00
访问冲突?
是 VS 调试的时候提示的?那多半是你的代码有堆栈溢出或者错误使用了已经释放的资源之类的问题。 多线程开发是比较容易遇到这样的问题的,仔细检查代码和仔细调试吧。 |
10
lfmy 2017-12-14 17:05:05 +08:00
花时间好好理一下,基本都能解决
|
11
racecoder OP @exch4nge 谢谢,就是有点难受,感觉付出回报不成比例,越学越不会。
@kirigaya 应该是吧,不是很清楚 @sbw 我不知道 data race 是什么,其中一个具体点的例子就是 opencv 的方法读取一张图片,然后用第三方库提取图片中的特征值。读取完立刻调用提取方法的话,vs2015 中就会停止运行,提示访问冲突,debug 也看不到。参数只有两个未初始化的变量指针,一个 cv:Mat。但是停 200ms 就正常运行了。 @kexming250 见上 |
12
HarrisonZ 2017-12-14 17:08:11 +08:00
golang 欢迎你
|
13
besto 2017-12-14 17:10:40 +08:00
@racecoder 加 sleep 能解决的问题,和语言没有任何关系。
如果是硬件相关的 case,有时候硬件设置寄存器之后确实需要 sleep 一小会。 像这种软件的 case,优先考虑这个方法是不是同步的,读读 API 文档怎么说的,别 API 是个 AIO 的,放进去当然立刻就返回了。 |
14
liuminghao233 2017-12-14 17:10:43 +08:00 via iPhone 4
能用 sleep 处理线程同步的一般都是大佬
|
15
cabing 2017-12-14 17:14:05 +08:00
消灭--指向无效单元的指针。
可以画个图锊一下逻辑。debug 跟踪下~~ 访问冲突 有没有使用 namespace 第三方包?特别是 c 的库~~ |
16
fcten 2017-12-14 17:14:10 +08:00
需要加 sleep 一般都是涉及到异步操作,初学者觉得加个 sleep 就好了,其实只是减小了冲突发生的几率
这锅 c++不背,先学好基础吧…… |
17
gamecreating 2017-12-14 17:15:14 +08:00
Sleep????????那你还是好好学学吧
|
18
zj299792458 2017-12-14 17:16:32 +08:00
听着像是加个锁就能解决的东西。
|
19
racecoder OP @besto api 写的很简单,就说了怎么用,然后有个 demo。不过应该不是 api 的问题,毕竟提取特征的方法在好几个地方用到了,却只有固定的一处会出异常。
@liuminghao233 @fcten 没有让 C++背锅啊,只是觉得代码好难写啊 |
21
racecoder OP @besto 抱歉,公司的项目,api 也是第三方的 sdk,所以我不能贴出来。感谢你那么想帮我,我只能想说说写 C++的感受。。。羡慕会 C++的大佬们。
|
22
skadi 2017-12-14 17:38:34 +08:00
加个 sleep...
我猜是多线程的问题吧. |
23
gamexg 2017-12-14 18:33:50 +08:00 via Android
@liuminghao233 想起了单片机模拟多线程...
|
24
Kilerd 2017-12-14 18:49:11 +08:00
rust 欢迎你
|
25
framlog 2017-12-14 19:00:58 +08:00
rust 欢迎你+1
|
26
codecooker 2017-12-14 19:05:52 +08:00
多线程抢占资源,你这样解决不了实际问题的。加个互斥锁吧,或者选一个线程安全的资源类型
|
27
wwqgtxx 2017-12-14 19:19:39 +08:00
@gamexg 那不都是一个大循环然后一大坨 switch 分支,尽量拆解每个工作让他看起来同步嘛,其实原理很类似于 Python 中用 yield 实现协程
|
28
MeteorCat 2017-12-14 19:22:41 +08:00 via Android
推荐 Golang 入门,进阶 C/C'+
|
29
racecoder OP 我就不一一 at 了。谢谢你们那么贴心的推荐,但是我已经学了 Java 了……,因为项目需要才临时学的 C++。暂时还没打算学那么多语言,毕竟 Java 还没搞明白。
|
30
MeteorCat 2017-12-14 20:00:54 +08:00 via Android
推荐 Golang 入门,进阶 C/C+
|
31
acros 2017-12-14 20:23:47 +08:00 via iPhone
从 java 到 c++?
估计在 c++里面对 new 和 delete 时机没弄清,说的访问冲突是内存泄漏问题吧。c |
32
lrxiao 2017-12-14 23:47:41 +08:00
只能说这锅 C++不背...不过 Rust fearless concurrency 可以一试
|
33
lsmgeb89 2017-12-14 23:57:53 +08:00
好好学学多线程编程,sleep 的话太业余了。
|
34
z1s23 2017-12-15 00:16:22 +08:00 via iPhone
少用高级特性,把 C++当成 C 用,会少很多问题,以前做图像处理用的 halcon 的商业 SDK,集成的时候用 C++发现开发效率低,当时部门熟练使用 C++的就我一个,后来改用 C#,开发效率高很多,而且同事上手也快,最后变成了 C#+图像算法+图像库的模式
|
35
we2ex 2017-12-15 00:29:12 +08:00 via Android
😂C++就不是一门能临时学的语言啊
|
36
bramblex 2017-12-15 09:21:41 +08:00
不是一个加锁的队列就能解决你的问题
|
37
lanry 2017-12-15 09:30:12 +08:00
和 C++貌似没什么关系呀
|
38
fuzhuo233 2017-12-15 09:59:12 +08:00
我感觉学 C++最好是学 QT 带着学 C++,这样容易有产出还好玩,纯玩一些算法命令行啥的很难静下心来一直玩的
|
40
GeruzoniAnsasu 2017-12-15 10:19:04 +08:00 1
“ opencv ” “提取特征”
估计也是算法方面的,库和 api 是 c++接口。讲真这样的不要强求自己往学会写 c++代码上靠,就当做 c 来写反而不会出什么问题,对于算法类的程序来说,用 1k 行流水账 baby code 实现要比用一大堆 c++特性又是容器又是 trait 又各种 move 智能指针写完不过瘾再 future 并发一轮好得多,写出来又没人看得懂,看得懂的人说不准当魔法越玩越黑最后只剩 magic code 虽然不知道怎么回事但好像就是能对最后谁都不敢动。 对于从其它语言,特别是 C 转过来的人,我一般只劝他们把函数写进类里然后 static 掉,全局变量你给我放类里 static 掉,其它正常的 oo 语言转过来的( java )什么,c with class 模式能写熟练已经谢天谢地了,你实在对性能没什么概念就尽量多传指针,对,多传指针,跟你熟知引用是差不多的,释放的问题裸 delete 就裸吧裸能解决问题总比多线程智能指针+容器莫名其妙的多次析构好得多,大不了多几把锁,反正线程运行的时候又不干预,释放的时候保护冗余一点没什么大不了的 RAII 我都不指望你知道字面意思了,别忘记把基类析构 virtual 就行 在 c++里线程其实还是相当原始,异步和多线程下并发要格外小心 |
41
hyq 2017-12-15 10:24:50 +08:00
有没有用过 mutex ?给不同线程需要访问的资源都用锁给保护下
|
42
racecoder OP @GeruzoniAnsasu 我现在能把程序跑起来已经很开心了,本来对 C++一点都不懂的,有需求要用人脸识别功能,就把原来的一个 MFC 程序改改,加上人脸的 SDK。不要说什么代码了,我连那些依赖的库和头文件都要搞半天。一下接触这么多东西,瞬间都懵逼了。。
@hyq 没有,我去找找看怎么用 |
43
gnaggnoyil 2017-12-15 14:42:48 +08:00
OpenCV 读入图像有异步的 API?我记得没有吧.LZ 你用的什么函数读入的图像
|
44
fooofei 2018-02-23 22:18:40 +08:00 via iPhone
需要找人来分析代码
|