我们在编写Qt程序的时候,有时候需要进行延时处理,使用时钟等手段又不太理想,又不能像C语言那样,利用for循环来达到延时效果,因此需要自定义的延时函数,看过底层的延时函数后,我们可以仿照它这样编写:
/**
* @brief 延时函数,单位秒
* @param secs 时间参数
*/
void pureAlgorithm::my_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);
my_thread_sleep(&ti);
}
/**
* @brief 使线程休眠
* @param ti 休眠结构体,包含了所需信息
*/
void pureAlgorithm::my_thread_sleep(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);
}
这样就完成了,其中ti.tv_nsec是自定义的最小时间单位,如此以上。
注意:调用该函数的线程会进入休眠状态,就是在那一行卡着,如果是主线程那你的程序就会出现卡顿