Пример #1
0
static int __stdcall workerThreadFunc(void *payload)
{
    size_t startId = ((size_t)payload) * (csmQueueCount / TASKS_MAX_PRIORITY);

    tmThreadName(gTelemetryContext, 0, "worker %d", int(payload));
    tmEnter(gTelemetryContext, TMZF_NONE, "worker");

    // Walk the queues and pull data out.
    size_t curQueue = startId;
    for ( ; ; )
    {
        int ttl = csmQueueCount * 2;
        while (ttl--)
        {
            task_t *taskToRun = task_queue_dequeue(&gQueues[curQueue++ % csmQueueCount]);
            if (!taskToRun)
            {
                continue;
            }

            taskToRun->callback(taskToRun->payload, taskToRun);
            taskToRun->state = TS_Done;
            break;
        }

        if (ttl == -1)
        {
            break;
        }
    }

    tmLeave(gTelemetryContext);

    return 0;
}
Пример #2
0
void tmCloseIfOpen(void)
{
    if (tmBaseRegion != NULL)
    {
        tmLeave(NULL,NULL);
    }
}
Пример #3
0
void loom_thread_join(ThreadHandle th)
{
    tmEnter(gTelemetryContext, TMZF_NONE, "thread_join");

    tmTryLock(gTelemetryContext, th, "thread_join");
    WaitForSingleObject(th, INFINITE);
    tmEndTryLock(gTelemetryContext, th, TMLR_SUCCESS);

    CloseHandle(th);

    tmLeave(gTelemetryContext);
}
Пример #4
0
void loom_thread_yield()
{
    tmEnter(gTelemetryContext, TMZF_IDLE, "thread_yield");
    SwitchToThread();
    tmLeave(gTelemetryContext);
}
Пример #5
0
void loom_thread_sleep(long ms)
{
    tmEnter(gTelemetryContext, TMZF_IDLE, "thread_sleep");
    Sleep(ms);
    tmLeave(gTelemetryContext);
}