本文整理汇总了C++中QSemaphore::tryAcquire方法的典型用法代码示例。如果您正苦于以下问题:C++ QSemaphore::tryAcquire方法的具体用法?C++ QSemaphore::tryAcquire怎么用?C++ QSemaphore::tryAcquire使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QSemaphore
的用法示例。
在下文中一共展示了QSemaphore::tryAcquire方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
void Barber::run() {
while (customersLeft.tryAcquire()) {
l1.lock();
buffer[in] = ID;
in = (in + 1) % numBarbers;
l1.unlock();
barberReady->release(); // signal availability
customerReady[ID].acquire(); // wait for customer to be sitted
barberDone[ID].release(); // signal that hair is done
}
}
示例2: tryAcquireWithTimeoutStarvation
void tst_QSemaphore::tryAcquireWithTimeoutStarvation()
{
class Thread : public QThread
{
public:
QSemaphore startup;
QSemaphore *semaphore;
int amountToConsume, timeout;
void run()
{
startup.release();
forever {
if (!semaphore->tryAcquire(amountToConsume, timeout))
break;
semaphore->release(amountToConsume);
}
}
示例3: PyBool_FromLong
static PyObject *meth_QSemaphore_tryAcquire(PyObject *sipSelf, PyObject *sipArgs, PyObject *sipKwds)
{
PyObject *sipParseErr = NULL;
{
int a0 = 1;
QSemaphore *sipCpp;
static const char *sipKwdList[] = {
sipName_n,
};
if (sipParseKwdArgs(&sipParseErr, sipArgs, sipKwds, sipKwdList, NULL, "B|i", &sipSelf, sipType_QSemaphore, &sipCpp, &a0))
{
bool sipRes;
Py_BEGIN_ALLOW_THREADS
sipRes = sipCpp->tryAcquire(a0);
Py_END_ALLOW_THREADS
return PyBool_FromLong(sipRes);
}
}
示例4: run
void SqlwriteThread_buffer::run()
{
QString databaseseq;
QSqlDatabase database = QSqlDatabase::addDatabase("QMYSQL",databaseseq.setNum(m_index));
database.setHostName(m_hostname);
database.setDatabaseName(m_databasename);
database.setUserName(m_usrname);
database.setPassword(m_psword);
if (!database.open())
{
database.close();
qDebug()<<trUtf8("数据库打不开")<<endl;
return ;
}
else
{
qDebug()<<trUtf8("线程内数据已经打开")<<endl;
}
/*
QString i2c;
QFile timelog("timelog"+i2c.setNum(m_index)+".txt");
if (!timelog.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append))
{
qDebug()<<trUtf8("LOG日志没有打开")<<endl;
return;
}
timelog.close();
*/
QSqlQuery sqlquery(database);
// QTime timerecord;
// timerecord.start();
qDebug()<<"sqltest thread runing...";
mysqldata *data=g_buffer.data();
mysqldata tempdata;
bool flag = true;
while(g_rIndex < DATABLOCKSIZE)
{
mutex.lock();
if(usedBuffer.tryAcquire())
{
flag = false;
int index=g_rIndex;
++g_rIndex;
qDebug()<<QThread::currentThreadId()<<trUtf8("线程读写第")
<<index<<trUtf8("块数据,now数据缓存区内存有 ")<<usedBuffer.available()+1<<" blocks!";
mutex.unlock(); //先锁住rindex,如果能获取得到资源,就取走该资源。rndex指向该资源。
tempdata = data[index % 10];
//qDebug()<<"-";//
freeBuffer.release();
}
else
{
mutex.unlock();
continue;
}
int range = tempdata.datavector.size();
for(int i=0;i <= range/SQLLINE ; ++i) //i要改成大数,同range
{
QString sqlstatement = "";
int statementnum =( (i+1)*SQLLINE > range ) ? range - i*SQLLINE: SQLLINE;
sqlstatement="insert into InsertTest("
"id,"
"taskseq,"
"protocoltype ,"
"threadnumintask,"
"idinthread,"
"framesize,"
"DestMac,"
"SourMac,"
"TypeorLength,"
"Data,"
"Upperlayer) VALUES";
for(int j=0; j < statementnum; j++)
{
sqlstatement += "("+tempdata.idvector.at(i*SQLLINE + j);
sqlstatement += "," + tempdata.taskseqvector.at(i*SQLLINE + j);
sqlstatement += ", '" + tempdata.typevector.at(i*SQLLINE + j)+"'";
sqlstatement += "," + tempdata.threadnumvector.at(i*SQLLINE + j);
sqlstatement += "," + tempdata.idinthreadvector.at(i*SQLLINE + j);
sqlstatement += "," + tempdata.framesizevector.at(i*SQLLINE + j);
sqlstatement += ", '" + tempdata.DestMacvector.at(i*SQLLINE + j)+"'";
sqlstatement += ", '" + tempdata.SourMacvector.at(i*SQLLINE + j)+"'";
sqlstatement += ", '" + tempdata.TypeorLengthvector.at(i*SQLLINE + j)+"'";
sqlstatement += ", '" + tempdata.datavector.at(i*SQLLINE + j)+"'";
sqlstatement += ", '" + tempdata.uplayervector.at(i*SQLLINE + j)+"')";
if( j == statementnum -1) sqlstatement += ";";
else sqlstatement += ",";
}
if( statementnum != 0 )
//.........这里部分代码省略.........
示例5: tryAcquireWithTimeout
void tst_QSemaphore::tryAcquireWithTimeout()
{
QFETCH(int, timeout);
// timers are not guaranteed to be accurate down to the last millisecond,
// so we permit the elapsed times to be up to this far from the expected value.
int fuzz = 50;
QSemaphore semaphore;
QElapsedTimer time;
#define FUZZYCOMPARE(a,e) \
do { \
int a1 = a; \
int e1 = e; \
QVERIFY2(qAbs(a1-e1) < fuzz, \
qPrintable(QString("(%1=%2) is more than %3 milliseconds different from (%4=%5)") \
.arg(#a).arg(a1).arg(fuzz).arg(#e).arg(e1))); \
} while (0)
QCOMPARE(semaphore.available(), 0);
semaphore.release();
QCOMPARE(semaphore.available(), 1);
time.start();
QVERIFY(!semaphore.tryAcquire(2, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 1);
semaphore.release();
QCOMPARE(semaphore.available(), 2);
time.start();
QVERIFY(!semaphore.tryAcquire(3, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 2);
semaphore.release(10);
QCOMPARE(semaphore.available(), 12);
time.start();
QVERIFY(!semaphore.tryAcquire(100, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 12);
semaphore.release(10);
QCOMPARE(semaphore.available(), 22);
time.start();
QVERIFY(!semaphore.tryAcquire(100, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 22);
time.start();
QVERIFY(semaphore.tryAcquire(1, timeout));
FUZZYCOMPARE(time.elapsed(), 0);
QCOMPARE(semaphore.available(), 21);
time.start();
QVERIFY(semaphore.tryAcquire(1, timeout));
FUZZYCOMPARE(time.elapsed(), 0);
QCOMPARE(semaphore.available(), 20);
time.start();
QVERIFY(semaphore.tryAcquire(10, timeout));
FUZZYCOMPARE(time.elapsed(), 0);
QCOMPARE(semaphore.available(), 10);
time.start();
QVERIFY(semaphore.tryAcquire(10, timeout));
FUZZYCOMPARE(time.elapsed(), 0);
QCOMPARE(semaphore.available(), 0);
// should not be able to acquire more
time.start();
QVERIFY(!semaphore.tryAcquire(1, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(1, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(10, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(10, timeout));
FUZZYCOMPARE(time.elapsed(), timeout);
QCOMPARE(semaphore.available(), 0);
#undef FUZZYCOMPARE
}
示例6: tryAcquire
void tst_QSemaphore::tryAcquire()
{
QSemaphore semaphore;
QCOMPARE(semaphore.available(), 0);
semaphore.release();
QCOMPARE(semaphore.available(), 1);
QVERIFY(!semaphore.tryAcquire(2));
QCOMPARE(semaphore.available(), 1);
semaphore.release();
QCOMPARE(semaphore.available(), 2);
QVERIFY(!semaphore.tryAcquire(3));
QCOMPARE(semaphore.available(), 2);
semaphore.release(10);
QCOMPARE(semaphore.available(), 12);
QVERIFY(!semaphore.tryAcquire(100));
QCOMPARE(semaphore.available(), 12);
semaphore.release(10);
QCOMPARE(semaphore.available(), 22);
QVERIFY(!semaphore.tryAcquire(100));
QCOMPARE(semaphore.available(), 22);
QVERIFY(semaphore.tryAcquire());
QCOMPARE(semaphore.available(), 21);
QVERIFY(semaphore.tryAcquire());
QCOMPARE(semaphore.available(), 20);
QVERIFY(semaphore.tryAcquire(10));
QCOMPARE(semaphore.available(), 10);
QVERIFY(semaphore.tryAcquire(10));
QCOMPARE(semaphore.available(), 0);
// should not be able to acquire more
QVERIFY(!semaphore.tryAcquire());
QCOMPARE(semaphore.available(), 0);
QVERIFY(!semaphore.tryAcquire());
QCOMPARE(semaphore.available(), 0);
QVERIFY(!semaphore.tryAcquire(10));
QCOMPARE(semaphore.available(), 0);
QVERIFY(!semaphore.tryAcquire(10));
QCOMPARE(semaphore.available(), 0);
}
示例7: tryAcquireWithTimeout
void tst_QSemaphore::tryAcquireWithTimeout()
{
QFETCH(int, timeout);
QSemaphore semaphore;
QTime time;
QCOMPARE(semaphore.available(), 0);
semaphore.release();
QCOMPARE(semaphore.available(), 1);
time.start();
QVERIFY(!semaphore.tryAcquire(2, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 1);
semaphore.release();
QCOMPARE(semaphore.available(), 2);
time.start();
QVERIFY(!semaphore.tryAcquire(3, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 2);
semaphore.release(10);
QCOMPARE(semaphore.available(), 12);
time.start();
QVERIFY(!semaphore.tryAcquire(100, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 12);
semaphore.release(10);
QCOMPARE(semaphore.available(), 22);
time.start();
QVERIFY(!semaphore.tryAcquire(100, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 22);
time.start();
QVERIFY(semaphore.tryAcquire(1, timeout));
QVERIFY(time.elapsed() <= timeout);
QCOMPARE(semaphore.available(), 21);
time.start();
QVERIFY(semaphore.tryAcquire(1, timeout));
QVERIFY(time.elapsed() <= timeout);
QCOMPARE(semaphore.available(), 20);
time.start();
QVERIFY(semaphore.tryAcquire(10, timeout));
QVERIFY(time.elapsed() <= timeout);
QCOMPARE(semaphore.available(), 10);
time.start();
QVERIFY(semaphore.tryAcquire(10, timeout));
QVERIFY(time.elapsed() <= timeout);
QCOMPARE(semaphore.available(), 0);
// should not be able to acquire more
time.start();
QVERIFY(!semaphore.tryAcquire(1, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(1, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(10, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 0);
time.start();
QVERIFY(!semaphore.tryAcquire(10, timeout));
QVERIFY(time.elapsed() >= timeout);
QCOMPARE(semaphore.available(), 0);
}
示例8: run
void SearchThread::run()
{
running = true;
/* search in cache */
char *searchString = strdup((char *) this->searchTerms.toUtf8 ().constData ());
SimpleVector < char *>*tokens = tokenizeString (searchString);
int numSearchTerms = tokens->size ();
int pos;
bool locked = semCache.tryAcquire(1,1000);
for (pos = 0; pos < nbCache; pos++)
{
if(address!="" && address !="ALL" && Cache[pos].host != address) continue;
// check if this is a hash-only search
char hashOnlySearch = false;
const char *hashStart = "hash_";
char *hashString = (char *)malloc(41);
char *pointerToHashStart = strstr (searchString, hashStart);
if (pointerToHashStart != NULL)
{
// search contains a hash-only search.
// extract hash, and ignore any other search terms
char *pointerToHash = &(pointerToHashStart[strlen (hashStart)]);
// hash should be at most 40 characters long
int numRead = sscanf (pointerToHash, "%40s", hashString);
if (numRead == 1)
{
delete[]searchString;
searchString = hashString;
hashOnlySearch = true;
}
else
{
free(hashString);
}
}
else
{
free(hashString);
}
char hitAll = true;
if (!hashOnlySearch)
{
// check each term
for (int j = 0; j < numSearchTerms && hitAll; j++)
{
char *term = *(tokens->getElement (j));
char * tmpstr = stringLocateIgnoreCase (Cache[pos].name, term);
if (tmpstr == NULL)
{
// missed this term
hitAll = false;
}
else delete [] tmpstr;
}
}
else
{
char *hashTerm = *(tokens->getElement (0));
if (strcasecmp (hashString, hashTerm) != 0)
{
hitAll = false;
}
}
if (hitAll)
{
QTextCodec *codecutf=QTextCodec::codecForName("utf8");
QTextCodec *codeclat=QTextCodec::codecForName("iso8859-1");
QString qstr;
// try to convert string from utf8
qstr=codecutf->toUnicode(Cache[pos].name);
// test if conversion is reversible
if(strcmp(Cache[pos].name,qstr.toUtf8().data()))
// if not reversible, it's not utf8, convert from iso8859 :
qstr=codeclat->toUnicode(Cache[pos].name);
QApplication::postEvent (eventReceiver,
new SearchResultEvent (qstr,
Cache[pos].size,
QString::fromLatin1
(Cache[pos].hash),
QString::fromLatin1
(Cache[pos].host)));
}
}
if(locked) semCache.release(1);
for (int i = 0; i < numSearchTerms; i++)
{
delete[](*(tokens->getElement (i)));
}
delete tokens;
//.........这里部分代码省略.........