Qt每个函数的运行时间是不是有时间限制?

lc8516 2019-01-17 03:26:45

在使用Qt时,某一个槽函数内,有如下代码:

m_KSRD.T55x7WriteDirect(1, &wrBuff[0]);
m_KSRD.T55x7WriteDirect(2, &wrBuff[4]);
m_KSRD.T55x7WriteDirect(3, &wrBuff[8]);
m_KSRD.T55x7WriteDirect(4, &wrBuff[12]);
m_KSRD.T55x7WriteDirect(5, &wrBuff[16]);
m_KSRD.T55x7WriteDirect(6, &wrBuff[20]);


每调用一次
m_KSRD.T55x7WriteDirect()
都会执行大约350ms的时间。
其中,wrBuff 为全局定义变量。
一般执行到第3次时,就会提示:“The inferior stopped because it received a signal from the Operating System”

检查代码,也不存在什么野指针。

将这段代码拆分为6个小函数,比如:
a(); b(); c(); d(); e(); f();
每个小函数都包含上述代码的一条语句。比如,
a函数里面只有:
m_KSRD.T55x7WriteDirect(1, &wrBuff[0]);

b函数里面只有:
m_KSRD.T55x7WriteDirect(2, &wrBuff[4]);

c/d/e/f函数一次类推。

主函数更改为
a();
b();
c();
d();
e();
f();


此时再执行代码则无问题


请问,这个是由什么原因造成的?
我感觉是每个函数的执行时间,系统或编译器对其做了限制,请问是不是这个问题呢,是的话,编译环境是从什么地方定义的,或者如何修改,谢谢!!

本人是个新手,感谢各位不吝赐教!!谢谢!!!
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lc8516 2019-01-18
  • 打赏
  • 举报
回复
引用 4 楼 qq_33462307 的回复:
[quote=引用 3 楼 lc8516 的回复:] [quote=引用 1 楼 qq_33462307 的回复:] 首先我觉得你这个怀疑毫无理由,没有任何必要去做这种事情,例如:如果有限制,死循环怎么产生的 再说你的问题,我觉得大概率还是内存越界了,你这个写法越界的可能性还是挺大的 你这个槽函数跨线程了吗?
再就是越界的可能性不大,定义的数组是有限的,每次都是取一定数量的字节。应该是跨线程了,这样的问题怎么解决?谢谢! 我是做嵌入式的,对windows的编程仅限于会写个小软件,这种深入性的东西真不会[/quote] 我也是刚刚学习呢,既然你说内存不会越界,那暂定为是因为跨线程导致的问题,据我所知,槽函数在跨线程的情况下,不同的connect方式槽函数的执行顺序是不同的,这点你可以百度,我可能也讲不清楚,就是connect函数的最后一个参数 可以先这样测试,把你的这个槽函数在单线程测试一下,重复执行多次,如果没有出错的情况下,基本可以断定是上面的问题了[/quote] DLL文件使用visual studio编译的,Qt使用MinGW,会出这个问题。我现在把Qt换成MSVC编译器后,这个问题消失。 谢谢!!
倚栏|听风 2019-01-18
  • 打赏
  • 举报
回复
引用 3 楼 lc8516 的回复:
[quote=引用 1 楼 qq_33462307 的回复:] 首先我觉得你这个怀疑毫无理由,没有任何必要去做这种事情,例如:如果有限制,死循环怎么产生的 再说你的问题,我觉得大概率还是内存越界了,你这个写法越界的可能性还是挺大的 你这个槽函数跨线程了吗?
再就是越界的可能性不大,定义的数组是有限的,每次都是取一定数量的字节。应该是跨线程了,这样的问题怎么解决?谢谢! 我是做嵌入式的,对windows的编程仅限于会写个小软件,这种深入性的东西真不会[/quote] 我也是刚刚学习呢,既然你说内存不会越界,那暂定为是因为跨线程导致的问题,据我所知,槽函数在跨线程的情况下,不同的connect方式槽函数的执行顺序是不同的,这点你可以百度,我可能也讲不清楚,就是connect函数的最后一个参数 可以先这样测试,把你的这个槽函数在单线程测试一下,重复执行多次,如果没有出错的情况下,基本可以断定是上面的问题了
lc8516 2019-01-17
  • 打赏
  • 举报
回复
引用 1 楼 qq_33462307 的回复:
首先我觉得你这个怀疑毫无理由,没有任何必要去做这种事情,例如:如果有限制,死循环怎么产生的 再说你的问题,我觉得大概率还是内存越界了,你这个写法越界的可能性还是挺大的 你这个槽函数跨线程了吗?
再就是越界的可能性不大,定义的数组是有限的,每次都是取一定数量的字节。应该是跨线程了,这样的问题怎么解决?谢谢! 我是做嵌入式的,对windows的编程仅限于会写个小软件,这种深入性的东西真不会
lc8516 2019-01-17
  • 打赏
  • 举报
回复
引用 1 楼 qq_33462307 的回复:
首先我觉得你这个怀疑毫无理由,没有任何必要去做这种事情,例如:如果有限制,死循环怎么产生的 再说你的问题,我觉得大概率还是内存越界了,你这个写法越界的可能性还是挺大的 你这个槽函数跨线程了吗?
m_KSRD.T55x7WriteDirect() 这个函数其实是调用的DLL的函数,功能是和下面的设备实现串行通讯,串行通讯是通过建立线程进行串口接收的。这样有怎么样的关系?
倚栏|听风 2019-01-17
  • 打赏
  • 举报
回复
首先我觉得你这个怀疑毫无理由,没有任何必要去做这种事情,例如:如果有限制,死循环怎么产生的 再说你的问题,我觉得大概率还是内存越界了,你这个写法越界的可能性还是挺大的 你这个槽函数跨线程了吗?

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧