Ich habe folgendes Problem:
Wenn ich in einer Klasse einen QMutex locken will, wirft dies eine Exception: "Access violation reading location..."
QMutex funktioniert jedoch in ein paar anderen Klasse wundervoll.
Mein Code:
Code: Alles auswählen
#ifndef C_USER_CONFIG_H_
#define C_USER_CONFIG_H_
#include <QStringList>
#include <QMutex>
class QString;
class CUserConfig {
public:
CUserConfig();
~CUserConfig();
void setValue( const QString& _name, const QString& _value);
QString getValue( const QString& _name);
int isSet( const QString& _name);
QString operator()( const QString& _name);
QString& operator[]( const QString& _name);
const QStringList& getNamesList() const { return m_strlstNames; }
const QStringList& getValuesList() const { return m_strlstValues; }
// TODO: save to file
private:
QStringList m_strlstNames;
QStringList m_strlstValues;
QMutex m_lock;
};
#endif // C_USER_CONFIG_H_
Code: Alles auswählen
#include "CUserConfig.h"
#include <QStringList>
#include <QMutex>
#include <QMutexLocker>
CUserConfig::CUserConfig() {
}
CUserConfig::~CUserConfig() {
}
void CUserConfig::setValue( const QString& _name, const QString& _value) {
QMutexLocker locker( &m_lock);
int pos;
if( (pos = m_strlstNames.indexOf( _name)) == -1) {
m_strlstNames.append( _name);
m_strlstValues.append( _value);
} else {
m_strlstValues[pos] = _value;
}
}
QString CUserConfig::getValue( const QString& _name) {
QMutexLocker locker( &m_lock);
int pos;
if( (pos = m_strlstNames.indexOf( _name)) == -1) {
return QString();
} else {
return m_strlstValues.at(pos);
}
}
int CUserConfig::isSet( const QString& _name) {
QMutexLocker locker( &m_lock);
int pos = m_strlstNames.indexOf( _name);
return pos;
}
QString CUserConfig::operator()( const QString& _name) {
return getValue( _name);
}
Weis echt nicht mehr weiter, verwende noch 5 andere QMutex im selben Programm, diese sperren und entsperren jedoch ohne Problem. Auch das nicht verwenden von QMutexLocker bringt keinen Unterschied.
Irgendjemand eine Idee?
PS: ich verwende Qt 4.0.1, da ich erst upgraden will, wenn das Programm an dem ich gerade schreibe einigermassen fertig ist.
mfg
uhu01