crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

ViGOur
  опции профиля:
сообщение 5.10.2009, 17:11
Сообщение #1


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


все досточно просто, если генерирую guid в основном потоке, то все ок;
int main(int argc, char *argv[])
{
    qInstallMsgHandler(myMessageOutput);

    CCoreApplication a( argc, argv);

    QUuid guid;
    guid = QUuid::createUuid()
    qDebug() << "guid: " << m_guid.toString();

     return a.exec();
}
если я это делаю из дочернего потока, то гуид не уникален, скорее всего конено же это вечерний ступор, но все же я пока не могу понять почему! :)
Все лишнее я убрал, кроме как CCoreApplication::rssDo оставил получение данных из xml файла настроек и дальнейшая работа.

Вот код:
main.cpp
#include <QtCore>

#include "CoreApplication.h"
#include <QUuid>

int main(int argc, char *argv[])
{
    CCoreApplication a( argc, argv);

    return a.exec();
}

CoreApplication.h

/*
 * CoreApplication.h
 *
 *  Created on: 05.10.2009
 *      Author: vigour
 */

#ifndef COREAPPLICATION_H_
#define COREAPPLICATION_H_

#include <QCoreApplication>

class QTimer;

class CCoreApplication: public QCoreApplication
{
    Q_OBJECT

private:
    QTimer *m_pTimer;

public:
    CCoreApplication( int &argc, char **argv);
    virtual ~CCoreApplication();

public:
    bool CreateThread( QString szUrl, QString szType);

protected Q_SLOTS:
    void rssDo();
    void DeleteThread();
};

#endif /* COREAPPLICATION_H_ */

CoreApplication.cpp

/*
 * CoreApplication.cpp
 *
 *  Created on: 05.10.2009
 *      Author: vigour
 */

#include <QTimer>

#include "CoreApplication.h"
#include "debug.h"

CCoreApplication::CCoreApplication( int &argc, char **argv):QCoreApplication::QCoreApplication( argc, argv)
{
    OUT_DEBUG;

    m_pTimer = new QTimer( this);
    connect( m_pTimer, SIGNAL( timeout()), this, SLOT( rssDo()));
    m_pTimer->setInterval( 3000);
    m_pTimer->start();
}

CCoreApplication::~CCoreApplication()
{
    OUT_DEBUG;

    m_pTimer->stop();
    m_pTimer->deleteLater();
}

void CCoreApplication::rssDo()
{
    OUT_DEBUG;

    qDebug() << " *** rssDo ***";

    CxXmlParam xp;
    if( xp.Fill())
    {
        QList<CxAppValue *>::iterator pIter;
        for( pIter = xp.m_listValues.begin(); pIter != xp.m_listValues.end(); ++pIter)
        {
            CxAppValue *pav = (CxAppValue *)*pIter;
            if( pav)
            {
                qDebug() << pav->GetUrl() << " " << pav->GetStringType();

                CreateThread( pav->GetUrl(), pav->GetStringType());
            }
        }
    }

}

bool CCoreApplication::CreateThread( QString szUrl, QString szType)
{
    OUT_DEBUG;

    CxLoader *pLoader=new CxLoader( this, szUrl, szType);
    if( !pLoader)
    {
        qDebug() << "pLoader is NULL...";
        return false;
    }
    qDebug( "pLoader is %x", (unsigned int)pLoader);

    connect( pLoader, SIGNAL( finished()), this, SLOT( DeleteThread()));
    pLoader->start();

    return true;
}

void CCoreApplication::DeleteThread()
{
    OUT_DEBUG;

    CxLoader *pLoader = qobject_cast<CxLoader *>(sender());
    if( pLoader)
    {
        qDebug( "Delete thread: 0x%x", (unsigned int)pLoader);
        pLoader->deleteLater();
    }
}

xLoader.h

/*
 * xLoader.h
 *
 *  Created on: 29.09.2009
 *      Author: vigour
 */

#ifndef XLOADER_H_
#define XLOADER_H_

#include <QObject>
#include <QThread>


class CxLoader: public QThread
{
    Q_OBJECT

public:
    CxLoader( QObject *pParent);
    CxLoader( QObject *pParent, QString szUrl, QString szType);
    virtual ~CxLoader();

public:
    void run();
};

#endif /* XLOADER_H_ */

xLoader.cpp

/*
 * xLoader.cpp
 *
 *  Created on: 29.09.2009
 *      Author: vigour
 */

#include <QUuid>

#include "xLoader.h"
#include "debug.h"


CxLoader::CxLoader(QObject *pParent):QThread::QThread( pParent)
{
    OUT_DEBUG;
}

CxLoader::CxLoader( QObject *pParent, QString szUrl, QString szType):QThread::QThread( pParent)
{
    OUT_DEBUG;

}


CxLoader::~CxLoader()
{
    OUT_DEBUG;
}

void CxLoader::run()
{
    OUT_DEBUG;

    QUuid guid;
    guid = QUuid::createUuid();
    qDebug() << "guid: " << guid.toString();

    exec();
}


да забыл сказать, работаю под Ubuntu 9.04 + eclipse

Сообщение отредактировал ViGOur - 5.10.2009, 17:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 3.7.2025, 23:35