Symbian qt线程

时间:2010-04-14 06:10:53

标签: multithreading qt symbian

1)在symbian c ++中不推荐使用线程。而不是他们推荐用于多任务的活动对象。目前我正在使用QT在symbian中开发应用程序。由于QT中没有活动对象,我想到使用线程。我的问题是,我可以使用线程,是否推荐。如果不推荐,如何实现多任务处理。

2)我创建了一个示例线程类,如下所示。当我从主窗口的构造函数调用测试函数时,线程将启动,但UI将处于挂起状态,实际上主窗口本身将不会显示。 请帮我解决问题。

class CSampleThread: public QThread

{
    Q_OBJECT

public:
    CSampleThread(QObject *parent = 0) : QThread(parent)
    {}

    virtual ~CSampleThread()
    {}

    void test(){
        QThread::start(LowPriority);
    }

protected:

    void run()
{
    while(true){}

    }
};

2 个答案:

答案 0 :(得分:1)

可能是“while(true)”正在使主循环占用CPU周期。尝试在循环体中添加对yield()或sleep()的调用。

答案 1 :(得分:1)

你说得对,对于Symbian C ++中大多数程序的开发,使用合作多任务(a.k.a.Active Objects)比先发制人的多任务(即线程)更受欢迎。但是,当异步操作可能需要很长时间时,在单独的线程中执行它可能是个好主意。虽然可以使用活动对象实现长时间运行的操作,但这样做可能会导致应用程序无响应,因为活动调度程序在执行长时间运行的RunL()函数时将无法处理输入事件。

同样,在Qt中,只有在应用程序需要执行长时间运行的任务时才需要使用线程。使用本机Symbian代码中的AO处理的事件处理由Qt的事件系统处理,异步通知通过信号和插槽传递。不出所料,Symbian上的Qt事件循环是使用活动对象实现的。

因此,虽然我们可以提供有关QThread使用的帮助,但这是否是正确解决方案的问题取决于您尝试解决的问题的性质。