由于 ST 库是单线程程序,如果使用了 unistd.h 里面的 sleep() 或者 usleep() 函数,就会阻塞所有协程函数的执行。但是有时候,某个协程确实要 sleep 休眠一些时间,那怎么办?
ST 库提供了 st_usleep() 函数,使用这个函数,就可以让某个协程休眠一段时间,但是又不会阻塞其他的协程函数的执行。下面就用一小段代码演示一下 st_usleep() 的用法,代码如下,为了简洁,省略了错误处理。
#include <stdio.h>
#include "st.h"
#include "../common.h"
void *print_a(void *arg) {
st_usleep(2 * 1000000LL);
st_utime_t time_now = st_utime();
printf("I am a , %lld\r\n", time_now);
return NULL;
}
void *print_b(void *arg) {
st_utime_t time_now = st_utime();
printf("I am b , %lld\r\n", time_now);
return NULL;
}
int main(int argc, char *argv[]) {
st_init();
st_thread_create(print_a, NULL, 0, 0);
st_thread_create(print_b, NULL, 0, 0);
st_thread_exit(NULL);
/* NOTREACHED */
return 1;
}
执行之后的结果如下图:
从上图看到,b 协程 sleep 并不会阻塞 a 协程的运行。
————————————————
版权声明:本文为CSDN博主「Loken2020」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012117034/article/details/124665316
|