当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 谁能告诉我,这段C语言代码到底哪里的语法出错啦?
帖子发表于 : 2013-03-17 22:07 
头像

注册: 2010-12-28 9:13
帖子: 37
送出感谢: 0 次
接收感谢: 1
代码在这里:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

void route(void *arg)
{
    printf("Yes, Yes, Yes!\n");
}

void *func(void *arg)
{
    pthread_detach(pthread_self());

    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);

    pthread_cleanup_push(route, NULL);
    while(1)
    {
        sleep(1);
    }
}

int main()
{
    pthread_t pt_one;
    int return_value;
    return_value = pthread_create(&pt_one, NULL, func, NULL);
    sleep(10);
    pthread_cancel(pt_one);

    return 0;
}



编译的时候老是通不过,错误提示是


附件:
ss.png
ss.png [ 13.35 KiB | 被浏览 1041 次 ]



_________________
http://www.yucoat.com
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 谁能告诉我,这段C语言代码到底哪里的语法出错啦?
帖子发表于 : 2013-03-17 22:12 
头像

注册: 2010-12-28 9:13
帖子: 37
送出感谢: 0 次
接收感谢: 1
已经查出问题了,注释pthread_cleanup_push(route, NULL);语句就可以了。。。但是我现在必须要用到这个函数啊。。


_________________
http://www.yucoat.com


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 谁能告诉我,这段C语言代码到底哪里的语法出错啦?
帖子发表于 : 2013-03-17 22:16 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
代码:
/* Install a cleanup handler: ROUTINE will be called with arguments ARG
   when the thread is canceled or calls pthread_exit.  ROUTINE will also
   be called with arguments ARG when the matching pthread_cleanup_pop
   is executed with non-zero EXECUTE argument.

   pthread_cleanup_push and pthread_cleanup_pop are macros and must always
   be used in matching pairs at the same nesting level of braces.  */
#  define pthread_cleanup_push(routine, arg) \
  do {                                                                        \
    __pthread_cleanup_class __clframe (routine, arg)

嗯,具体用法我不懂,但根据头文件里面的注释,pthread_cleanup_push和pthread_cleanup_pop必须成对出现。


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 谁能告诉我,这段C语言代码到底哪里的语法出错啦?
帖子发表于 : 2013-03-17 22:17 
头像

注册: 2010-12-28 9:13
帖子: 37
送出感谢: 0 次
接收感谢: 1
找到原因了,pthread_cleanup_push()和pthread_cleanup_pop()必须成对地使用,因为两个宏里面分别有“{”和“}”


_________________
http://www.yucoat.com


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译