LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1221|回复: 5

如何"sleep"一个线程?

[复制链接]
发表于 2006-3-4 13:11:39 | 显示全部楼层 |阅读模式
我想在程序中让一个线程不消耗CPU资源的等待60秒钟.请问用哪个函数可以时限?
我看了sleep()函数的man,好象sleep会让整个进程都阻塞掉:
sleep()  makes  the  current  process  sleep until seconds seconds have elapsed or a signal arrives which is not ignored.
发表于 2006-3-4 19:50:27 | 显示全部楼层
current process 是指当前的线锃!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-4 23:32:52 | 显示全部楼层
Post by newroot
current process 是指当前的线锃!!

process是进程,不是线程,用sleep肯定会将进程中的所有的线程都挂起来
回复 支持 反对

使用道具 举报

发表于 2006-3-5 01:23:22 | 显示全部楼层
Post by anuode
process是进程,不是线程,用sleep肯定会将进程中的所有的线程都挂起来

说得如此的绝对,那么你是试过了?
回复 支持 反对

使用道具 举报

发表于 2006-3-5 20:44:27 | 显示全部楼层
1.process 一般指进程,线程用thread 表示.
2. sleep 只阻塞调用线程


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include <time.h>

  5. int sleep_flag = 0;

  6. void * foo(void * arg)
  7. {
  8.         time_t t;
  9.         time(&t);
  10.         printf("%s: begin sleep\n", ctime(&t));
  11.         sleep_flag = 1;
  12.         sleep(10);
  13.         sleep_flag = 0;
  14.         time(&t);
  15.         printf("%s: end sleep.\n", ctime(&t));
  16. }

  17. int
  18. main()
  19. {
  20.         pthread_t thread;
  21.         time_t t;
  22.         if (pthread_create(&thread, NULL, foo, NULL) != 0)
  23.         {
  24.                 perror("pthread create:");
  25.                 exit(EXIT_FAILURE);
  26.         }

  27.         while(!sleep_flag);
  28.         while(sleep_flag)
  29.         {

  30.                 time(&t);
  31.                 printf("%s: sleep ...\n", ctime(&t));
  32.                 sleep(1);
  33.         }
  34.         exit(EXIT_SUCCESS);
  35. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2006-3-6 09:44:56 | 显示全部楼层
sleep是由posix定义的,它的作用是睡眠一个进程。
可是目前linux的线程实现采用“1-1模型”,每个线程其实是调用clone系统调用创建的,每个线程实际上在核心是一个个单独的进程,所以……
另外sleep是非线程安全的,好的方法是用pthread_cond_wait实现。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表