qt下程序为什么中断服务程序在pthread

关于QT中不用QThread写多线程,可以用pthread吗_百度知道请教:qtcreator如何调入-lpthread参数?_qt吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:28,783贴子:
请教:qtcreator如何调入-lpthread参数?收藏
在linux下编写多线程,已经添加#include&pthread.h&头文件,qt编译器提示: error: undefined reference to `pthread_create'。经过百度,得知:“pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。”所以,解决方法是:“在编译中要加 -lpthread参数(gcc thread.c -o thread -lpthread)”。问题是,我不想在终端单独打gcc命令,而是希望能在qtcreator中直接编译。请问该如何设置(添加上这一个-lpthread的后缀)?谢谢!
纸屏这一本,联想YOGA系列全新笔记本张天爱期待与你相遇,官网立即购买!
Qt Creator 3.3.0 (opensource)Based on Qt 5.4.0 (GCC 4.6.1, 64 bit)
已经得到指点,完美解决,方法是:在多线程那个项目的 .pro文件 中添加:LIBS += -lpthread 。
奇怪 ,为什么我加了LIBS += -lpthread 说 lpthread: No such file or directory救命啊
问题解决在新版本的g++中不能使用-lpthread 而应使用-pthread,相应的在.pro中应添加LIBS += -pthread
既然你用了qt为什么还要去调系统调用?
,   --!!!!我是一条充满激情的小尾巴
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或嵌入式(单片机(2)
没有用按键进入DFU模式,直接在timer中定时几秒钟进入,如果app没有中断,一切正常。
但是有了中断,app就运行不正常了。
在dfu程序中断中不能直接跳入app程序,需要用一个标志来判断。
一点要注意flash起始地址和中断向量地址的位置要改对,flash起始地址有没改对很简单,用J-Flash看下hex即可。
中断向量地址对不对就不好判断了,可以写个简单的程序看中断进入没。程序中绝对不能改变中断向量起始地址!
程序没有擦除完就进入了app.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:356631次
积分:7237
积分:7237
排名:第2104名
原创:375篇
转载:78篇
评论:82条
(6)(5)(4)(6)(5)(12)(21)(4)(13)(33)(15)(41)(46)(23)(28)(12)(23)(1)(7)(3)(1)(6)(6)(20)(12)(2)(1)(2)(6)(3)(1)(1)(1)(9)(9)(2)(1)(4)(4)(2)(2)(2)(6)(1)(3)(3)(2)(1)(3)(22)(7)(1)QT编程(5)
Qt 为何没有提供 Sleep
论坛上不时见到有人问:
Qt 为什么没有提供跨平台的 sleep 函数?使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应?QThread 中提供了protected 权限的 sleep 函数,如何用到主线程中?使用 QTest 中的 qSleep,在windows下如何隐藏控制台?
这些问题其实归结为一点:在主线程中使用这些函数是一种错误,这会直接导致界面无法刷新,用户与程序无法交互。
Qt不提供,是因为你不需要在主线程中使用 sleep 函数。
如何让程序等待一段时间
t.start();
while(t.elapsed()&1000);
这种死循环也是一种常见错误用法。但改成正确的还是比较简单的:
t.start();
while(t.elapsed()&1000)
QCoreApplication::processEvents();
不停地处理事件,以使得程序保持响应。
这是Qt4.7引入的新的类,和QTime相比,它提供了更快的计算 elapsed 时间的方法。
t.start();
while(t.elapsed()&1000)
QCoreApplication::processEvents();
QTest::qWait
这是QTest模块提供的等待函数
下面是其源代码(和我们前面的代码很像吧?):
namespace QTest
inline static void qWait(int ms)
Q_ASSERT(QCoreApplication::instance());
timer.start();
QCoreApplication::processEvents(QEventLoop::AllEvents, ms);
QTest::qSleep(10);
} while (timer.elapsed() & ms);
其实没什么魔力,对吧?但是因为它QTest模块,所以在程序中我们不要使用它。
QEventLoop
配合QTimer使用局部的 eventLoop 也是一个不错的选择。例子:
QTimer::singleShot(100, &eventloop, SLOT(quit()));
eventloop.exec();
这两个和本文没有什么直接关系,QTimer估计大家都很熟了。而QBasicTimer估计很少有人用。
与QTimer相比,QBasicTimer更快速、轻量、底层。与QTimer相比,它不是QObject的派生类。
跨平台的sleep
尽管一开始我们就说了,不需要这个东西。但不排除某种场合下,你确实需要这个东西。如何实现一个跨平台的 sleep 呢?
我们一开始也提到了,QThread类 和 QTest模块都提供了sleep函数,其实我们只需要看看他们的源码就够了:
QTest 模块中的函数很简单(windows下调用Sleep,其他平台调用 nanosleep):
void QTest::qSleep(int ms)
QTEST_ASSERT(ms & 0);
#ifdef Q_OS_WIN
Sleep(uint(ms));
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
nanosleep(&ts, NULL);
看QThread的源码,windows下同样直接调用Sleep,但非windows的实现比这个就复杂多了:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14774次
排名:千里之外
原创:46篇
转载:85篇
(29)(64)(11)(2)(25)

我要回帖

更多关于 qt 中断 的文章

 

随机推荐