Symbian QT Threading - PullRequest
       19

Symbian QT Threading

1 голос
/ 14 апреля 2010

1) В symbian c ++ thread не рекомендуется. Вместо этого они рекомендуют активный объект для многозадачности. В настоящее время я использую QT для разработки приложения в symbian. Поскольку в QT нет активного объекта, я подумал об использовании потока. Мой вопрос, могу ли я использовать нить, рекомендуется ли это. Если не рекомендуется, как добиться многозадачности.

2) Я создал образец класса потока, как показано ниже. Когда я вызываю тестовую функцию из конструктора потока главного окна, запускается поток, но пользовательский интерфейс будет в состоянии зависания, само основное окно не будет отображаться. Пожалуйста, помогите мне решить проблему.

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 ]

1 голос
/ 14 апреля 2010

Вы правы, говоря, что для разработки большинства программ на Symbian C ++ использование совместной многозадачности (например, активных объектов) предпочтительнее, чем многозадачности с упреждающим действием (то есть потоками). Однако, когда асинхронная операция может занять много времени, возможно, это хорошая идея выполнить ее в отдельном потоке. Хотя можно реализовать длительные операции с использованием активных объектов, это может привести к тому, что приложение перестанет отвечать на запросы, поскольку активный планировщик не сможет обрабатывать входные события при выполнении длительной функции RunL ().

Аналогично, в Qt использование потоков требуется только тогда, когда вашему приложению необходимо выполнить долгосрочную задачу. Обработка событий, которая будет обрабатываться с использованием AO в собственном коде Symbian, обеспечивается системой событий Qt с асинхронными уведомлениями, доставляемыми через сигналы и слоты. Неудивительно, что цикл событий Qt в Symbian реализован с использованием активных объектов.

Итак, хотя мы можем предоставить помощь по использованию QThread, вопрос о том, является ли это правильным решением, зависит от характера проблемы, которую вы пытаетесь решить.

1 голос
/ 14 апреля 2010

Возможно, что while (true) истощает основной поток для циклов ЦП. Попробуйте добавить вызов yield () или sleep () в тело цикла.

...