在进行QT编程时,有时候需要自己定义线程休眠函数,代码如下,调用时将休眠线程,可自定义时间单位。
/**
* @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是自定义的最小时间单位。
注意:在主线程调用时,会让主线程卡顿,即UI界面无响应,那个时候不要操作UI界面了,可能会让系统报无响应错误。