Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56532
  • 博文数量: 18
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-09 21:53
文章分类
文章存档

2011年(1)

2009年(17)

我的朋友

分类: LINUX

2009-02-12 23:44:08

11.QWidget::repaint和QWidget::update的区别?
    这个类似于sendEvent和postEvent.QWidget::repaint会导致QWidget立即重画,QWidget::update只是产生一个QPaint事件并调用postEvent将其放入posted event队列,等待消息循环检查到有事件后再执行。因此要尽量使用QWidget::update,绘图操作是比较消息耗CPU时间。

12.能给其它进程的QWidget发消息?
    不能,QT Embeded是一个简单的图形系统,不能像Win32/MFC那样通过EnumWindows/FindWindow查找整个系统的window,不能通过sendMessaget给其它进程的window发消息。虽然topLevelWidget->winId()也是唯一的,但是不同进程的widget是互相不知道的。在QT Embeded上没有类似spy++的工具。

13.QT Embeded是否支持多进程多线程?
    支持多进程,编译时由QT_NO_QWS_MULTIPROCESS来控制。有些嵌入式环境下没必要支持多进程,可以只有一个QT进程,即做QWS Server,又做QWS Client。这样编译出来的共享库会小一些,程序执行起来也快。
    支持多线程,编译时由QT_THREAD_SUPPORT来控制,QT Embeded还定义了QMutex、QSemaphore、QThread等类支持多线程,实现线程之间的通讯。QThread本身是pthread库的一个封库。

14.QT Embeded是否线程安全?
    C++的类库一般都不是线程安全的,QT Embeded也不例外,其的绝大多数函数和类都不是线程安全,线程安全需要用户自已保证。QApplication提供一个锁,用户可以qapp->lock()/unlock()来保护代码或自已定义QMutex。

15.既然QT Embeded线程不安全,线程如何给widget发消息?
    可以通过QThread::postEvent给widget发消息,QThread::postEvent实际调用QApplication::postEvent来实现的,QApplication::postEvent是线程安全,它通过postevent_mutex来保护posted event队列。将消息加入到posted event队列后,会唤醒主线程执行消息循环,从而保证新加入的消息有机会被执行。
阅读(1716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~