QMutex, подождите здесь, если поток находится в функции

Я просто хочу реализовать код, как показано ниже.

QString Class1::getNonce()
{
//if some thread is getting nonce wait here until it finishes the its own job.
mutex.lock();
QString nonce=QString("%1").arg(QDateTime::currentDateTime().toTime_t());
mutex.unlock();
return nonce;
}

даже я пишу с мьютексом, разные темы получают одно и то же. Как я могу решить эту проблему?
Благодарю.

1

Решение

Я предпочитаю использовать QMutexLocker,

Class1::Class1()
{
m_mutex = new QMutex();

}

QString Class1::getNonce()
{
static int counter = 0;
QMutexLocker locker(m_mutex);
counter++;
return QString::number(counter);
}

Надеюсь, это поможет.

2

Другие решения

Используйте атомный счетчик для вашего nonce:

QString Class1::getNonce()
{
static std::atomic<unsigned long long> counter;
return QString::number(counter++);
}
2

Спасибо за все сообщения, которые я использовал таким образом

nonce=QDateTime::currentDateTime().toTime_t()+7500;

......

QString Class1::getNonce()
{
QElapsedTimer timer;
timer.start();

mutex.lock();
nonce+=timer.nsecsElapsed()/250;
mutex.unlock();
return QString("%1").arg(nonce);
}
1
По вопросам рекламы [email protected]