首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将POSIX线程暂停特定时间间隔的问题

将POSIX线程暂停特定时间间隔的问题
EN

Stack Overflow用户
提问于 2010-08-20 16:35:53
回答 2查看 511关注 0票数 0

我必须在单独的线程中调用一个方法(我使用的是posix线程),它在每5秒后更新一些值,并编写了下面的代码。

代码语言:javascript
复制
void *threadEntry(void *)
{
  while(1)
  {
    updateValue();//to update some values
    usleep(5000000);//pause for 5 second
   }
}
pthread_t thread1;
pthread_create(&thread1,NULL,threadEntry,NULL);

但是这个线程在4-5分钟后出现分段错误,这可能是.What的原因?有没有其他方法可以暂停POSIX线程。(我使用linux)

EN

回答 2

Stack Overflow用户

发布于 2010-08-20 19:53:35

正确的做法是使用纳米睡眠,因为我们的睡眠和睡眠可能会扰乱SIGALARM,而纳米睡眠是专门为线程而设计的:

代码语言:javascript
复制
struct timespec mytimeout = {
    .tv_sec = 5,
    .tv_usec = 0,
};
struct timespec remaining;
nanosleep(&mytimeout, &remaining);

我最初的回答是使用select技巧,但让我们停止推广糟糕的代码

回到问题的根源,你怎么知道你的分割错误来自休眠代码?你得到了一个可以回溯的核心转储吗?

票数 1
EN

Stack Overflow用户

发布于 2010-08-20 20:27:41

在POSIX系统( linux就是)上,nanosleep是这种睡眠的最佳选择:

代码语言:javascript
复制
int nanosleep(const struct timespec *req, struct timespec *rem);

其中req是您的请求,rem是线程过早中断时剩余的休眠时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3529337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档