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){}
}
};发布于 2010-04-14 14:36:00
可能是"while(true)“正在耗尽主线程的CPU周期。尝试在循环体中添加一个调用,以使其输出()或睡眠()。
发布于 2010-04-14 20:03:20
您说得对,对于Symbian C++中的大多数程序的开发,使用协作多任务(也称为活动对象)比抢占式多任务(即线程)更受欢迎。但是,当异步操作可能需要很长时间时,在单独的线程中执行它可能是一个好主意。虽然可以使用活动对象实现长时间运行的操作,但这样做可能会导致应用程序变得无响应,因为活动调度程序在执行长时间运行的RunL()函数时将无法处理输入事件。
类似地,在Qt中,只有当您的应用程序需要执行长时间运行的任务时,才需要使用线程。在本地Symbian代码中使用AO处理的事件处理由Qt的事件系统负责,异步通知通过信号和插槽传递。毫不奇怪,Symbian上的Qt事件循环是使用活动对象实现的。
因此,虽然我们可以为QThread的使用提供帮助,但这是否是正确的解决方案的问题取决于您试图解决的问题的性质。
https://stackoverflow.com/questions/2635223
复制相似问题