Esempio n. 1
0
static void
threadFunc(union sigval sv)
{
    mqd_t *mqdp;

    mqdp = sv.sival_ptr;

    notifySetup(mqdp);
    drainQueue(*mqdp);
}
void SingleBillElevationDataProvider::onElevationData(ElevationData* elevationData) {
  _elevationData = elevationData;
  _elevationDataResolved = true;
  if (_elevationData == NULL) {
    ILogger::instance()->logError("Can't download Elevation-Data from %s",
                                  _bilUrl.getPath().c_str());
  }

  drainQueue();
}
Esempio n. 3
0
static void                     /* Thread notification function */
threadFunc(union sigval sv)
{
    mqd_t *mqdp;

    mqdp = sv.sival_ptr;

    /* Reregister for message notification */

    notifySetup(mqdp);
    drainQueue(*mqdp);
}
Esempio n. 4
0
int
main(int argc, char *argv[])
{
    mqd_t mqd;

    if (argc != 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s /mq-name\n", argv[0]);

    mqd = mq_open(argv[1], O_RDONLY | O_NONBLOCK);
    if (mqd == (mqd_t) -1)
        errExit("mq_open");

    notifySetup(&mqd);
    drainQueue(mqd);

    pause();
}
Esempio n. 5
0
int
main(int argc, char *argv[])
{
    mqd_t mqd;

    if (argc != 2 || strcmp(argv[1], "--help") == 0)
        usageErr("%s /mq-name\n", argv[0]);

    mqd = mq_open(argv[1], O_RDONLY | O_NONBLOCK);
    if (mqd == (mqd_t) -1)
        errExit("mq_open");

    notifySetup(&mqd);
    drainQueue(mqd);    /* Handle possibility that messages were already
                           queued before we established notification */

    pause();            /* Wait for notifications via thread function */
}
Esempio n. 6
0
void FixedThreadPool::workerThread()
{
    int gateCount = d_gateCount;

    while (1) {
        {
            bslmt::LockGuard<bslmt::Mutex> lock(&d_gateMutex);

            ++d_numThreadsReady;
            d_threadsReadyCond.signal();

            while (gateCount == d_gateCount) {
                d_gateCond.wait(&d_gateMutex);
            }

            gateCount = d_gateCount;
        }

        int control = d_control.loadRelaxed();

        if (e_RUN == control) {
            processJobs();
            control = d_control;
        }

        if (e_DRAIN == control) {
            drainQueue();
        }
        else if (e_SUSPEND == control) {
            continue;
        }
        else {
            BSLS_ASSERT(e_STOP == control);
            return;                                                   // RETURN
        }
    }
}