пятница, 21 мая 2010 г.

Аналог Sleep (Win32) функции в Mac OS (iPhone OS)

Материал взят из http://www.gamedev.ru/code/forum/?id=92177

Названия функций я поменял, чтобы уменьшить вероятность конфликта имён.

Спасибо разработчикам QT.



#ifndef QTSLEEP_H
#define QTSLEEP_H

#include <pthread.h>
#include <sys/time.h>

static void qt_thread_sleep(struct timespec *ti)
{
pthread_mutex_t mtx;
pthread_cond_t cnd;

pthread_mutex_init(&mtx, 0);
pthread_cond_init(&cnd, 0);

pthread_mutex_lock(&mtx);
(void) pthread_cond_timedwait(&cnd, &mtx, ti);
pthread_mutex_unlock(&mtx);

pthread_cond_destroy(&cnd);
pthread_mutex_destroy(&mtx);
}

void qt_sleep(unsigned long secs)
{
struct timeval tv;
gettimeofday(&tv, 0);
struct timespec ti;
ti.tv_sec = tv.tv_sec + secs;
ti.tv_nsec = (tv.tv_usec * 1000);
qt_thread_sleep(&ti);
}

void qt_msleep(unsigned long msecs)
{
struct timeval tv;
gettimeofday(&tv, 0);
struct timespec ti;

ti.tv_nsec = (tv.tv_usec + (msecs % 1000) * 1000) * 1000;
ti.tv_sec = tv.tv_sec + (msecs / 1000) + (ti.tv_nsec / 1000000000);
ti.tv_nsec %= 1000000000;
qt_thread_sleep(&ti);
}

void qt_usleep(unsigned long usecs)
{
struct timeval tv;
gettimeofday(&tv, 0);
struct timespec ti;

ti.tv_nsec = (tv.tv_usec + (usecs % 1000000)) * 1000;
ti.tv_sec = tv.tv_sec + (usecs / 1000000) + (ti.tv_nsec / 1000000000);
ti.tv_nsec %= 1000000000;
qt_thread_sleep(&ti);
}

#endif

Комментариев нет:

Отправить комментарий

Постоянные читатели

Архив блога