如何阻止CPU上的线程(因此它不会占用CPU时间),然后在时间t之后将其唤醒,而不使用信号机制。
答案 0 :(得分:0)
没有跨平台的方法可以做到这一点,但有几个选项:
由于您是在Linux上执行此操作,因此最佳选择是pthread
库,例如pthread_mutex_timedlock
示例:
#include <pthread.h>
#include <time.h>
pthread_mutex_t mutex;
struct timespec timeout;
timeout.tv_sec = 2; // Two seconds
timeout.nv_nsec = 0; // Zero nanoseconds
pthread_mutex_init(&mutex, NULL); // Initialize mutex object
pthread_mutex_timedlock(&mutex, &timeout); // Wait for two seconds.
建议您检查函数的返回值是否存在可能发生的错误。
如果您真的不想使用任何操作系统库,则无法让线程进入休眠状态,但您可以使用特殊说明,例如pause
或rep; nop;
同时旋转以降低功耗。
例如:
while (time(NULL) < timeToWake) asm("pause");