Hi,

In addition to what Sze-Howe told, you should consider the backend
used by the Qt database driver. In your case of SQLite you could end
up in a situtation where multiple simultaneous INSERT queries
seriously degrade the performance of SQLite engine which uses file
locks to isolate transactions.

Cheers

2014-08-18 12:26 GMT+06:00 Igor Mironchik <igor.mironc...@gmail.com>:
> Hi.
>
> I want to move write to DB operation to another thread (from the GUI
> thread). And I implemented the following QRunnable:
>
>
> //
>
> // SourcesLogWritter
>
> //
>
>
> class SourcesLogWritter
>
>       :       public QRunnable
>
> {
>
> public:
>
>       SourcesLogWritter()
>
>       {
>
>               setAutoDelete( false );
>
>       }
>
>
>       void setData( const QDateTime & dateTime,
>
>               const QString & channelName,
>
>               Como::Source::Type type,
>
>               const QString & sourceName,
>
>               const QString & typeName,
>
>               const QVariant & value,
>
>               const QString & desc )
>
>       {
>
>               m_dateTime = dateTime;
>
>               m_channelName = channelName;
>
>               m_type = type;
>
>               m_sourceName = sourceName;
>
>               m_typeName = typeName;
>
>               m_value = value;
>
>               m_desc = desc;
>
>       }
>
>
>       void run()
>
>       {
>
>               QSqlQuery insert( QLatin1String(
>
>                       "INSERT INTO sourcesLog ( dateTime, channelName, type, "
>
>                       "sourceName, typeName, value, desc ) "
>
>                       "VALUES ( ?, ?, ?, ?, ?, ?, ? )" ) );
>
>
>               insert.addBindValue( dateTimeToString( m_dateTime ) );
>
>               insert.addBindValue( m_channelName );
>
>               insert.addBindValue( (int) m_type );
>
>               insert.addBindValue( m_sourceName );
>
>               insert.addBindValue( m_typeName );
>
>               insert.addBindValue( m_value.toString() );
>
>               insert.addBindValue( m_desc );
>
>
>               insert.exec();
>
>       }
>
>
> private:
>
>       QDateTime m_dateTime;
>
>       QString m_channelName;
>
>       Como::Source::Type m_type;
>
>       QString m_sourceName;
>
>       QString m_typeName;
>
>       QVariant m_value;
>
>       QString m_desc;
>
> }; // class SourcesLogWritter
>
> Is it OK to launch this runnable every time when I need to write to the log?
>
> I do the following:
>
> d->m_sourcesLogWritter->setData( dateTime, channelName,
>
>     type, sourceName, typeName, value, desc );
>
>
> QThreadPool::globalInstance()->start(
>
>     d->m_sourcesLogWritter.data() );
>
> And what if previous operation is still not finished and I will launch
> another?
>
> Thanks.
>
>
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to