все досточно просто, если генерирую 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 файла настроек и дальнейшая работа.
Вот код:
#include <QtCore>
#include "CoreApplication.h"
#include <QUuid>
int main(int argc, char *argv[])
{
CCoreApplication a( argc, argv);
return a.exec();
}
#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_ */
#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();
}
}
#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_ */
#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