当前位置: 技术问答>linux和unix
pthread编程入门问题--急,在线给分
来源: 互联网 发布时间:2014-12-10
本文导语: int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg) 我的代码如下: 方法一: pthread_t tid1; void myfunc( void ) { ××××× ;} pthread_create(&tid1,NULL,(void *(*)(void *)&myfunc,NULL); ...
int pthread_create(pthread_t * thread, pthread_attr_t * attr,
void * (*start_routine)(void *), void * arg)
我的代码如下:
方法一:
pthread_t tid1;
void myfunc( void ) { ××××× ;}
pthread_create(&tid1,NULL,(void *(*)(void *)&myfunc,NULL);
方法二:
pthread_t tid1;
void * myfunc( void * myarg) { ××××× ;}
pthread_create(&tid1,NULL,(void *(*)(void *)myfunc,NULL);
再Redhat 7.2 QT/KDE下编译,结果都没有通过,哪位兄台指点一下,我知道错误一定是在第三个参数上。编译结果告诉我是,pthread_create 没有这样的用法。
最好能学习一下肯定可以执行的简单的源代码。
多谢各位了
void * (*start_routine)(void *), void * arg)
我的代码如下:
方法一:
pthread_t tid1;
void myfunc( void ) { ××××× ;}
pthread_create(&tid1,NULL,(void *(*)(void *)&myfunc,NULL);
方法二:
pthread_t tid1;
void * myfunc( void * myarg) { ××××× ;}
pthread_create(&tid1,NULL,(void *(*)(void *)myfunc,NULL);
再Redhat 7.2 QT/KDE下编译,结果都没有通过,哪位兄台指点一下,我知道错误一定是在第三个参数上。编译结果告诉我是,pthread_create 没有这样的用法。
最好能学习一下肯定可以执行的简单的源代码。
多谢各位了
|
编译的时候要连 pthread 库文件。
cc myproc.c -lthread -o myproc
不知道你的thread库文件名字是什么,如果没有找到 libthread.a 文件,可以看看有没有其他的thread库,例如 libpthreads.a libgthreads.a 或者.so结束的动态库文件;找到后 -l选项也要相应改成 -lpthreads 或 -lgthreads
cc myproc.c -lthread -o myproc
不知道你的thread库文件名字是什么,如果没有找到 libthread.a 文件,可以看看有没有其他的thread库,例如 libpthreads.a libgthreads.a 或者.so结束的动态库文件;找到后 -l选项也要相应改成 -lpthreads 或 -lgthreads
|
#include
#include
/* Prints x’s to stderr. The parameter is unused. Does not return. */
void* print_xs (void* unused)
{
while (1)
fputc (‘x’, stderr);
return NULL;
}
/* The main program. */
int main ()
{
pthread_t thread_id;
/* Create a new thread. The new thread will run the print_xsfunction. */
pthread_create (&thread_id, NULL, &print_xs, NULL);
/* Print o’s continuously to stderr. */
while (1)
fputc (‘o’, stderr);
return 0;
}
#include
/* Prints x’s to stderr. The parameter is unused. Does not return. */
void* print_xs (void* unused)
{
while (1)
fputc (‘x’, stderr);
return NULL;
}
/* The main program. */
int main ()
{
pthread_t thread_id;
/* Create a new thread. The new thread will run the print_xsfunction. */
pthread_create (&thread_id, NULL, &print_xs, NULL);
/* Print o’s continuously to stderr. */
while (1)
fputc (‘o’, stderr);
return 0;
}
|
void * ServerThread(void * arg)
{
}
int i;
pthread_t tid;
pthread_create( &tid, NULL, &ServerThread,(void *)i);
{
}
int i;
pthread_t tid;
pthread_create( &tid, NULL, &ServerThread,(void *)i);
|
解决方法有两个
1 调用 pthread_create 里 myfun 前的一对类型转换定义,因为,这种写法只适用于定义,不适用于调用时的类型转换。你的myfun定义符合要求。如果是C++ 中,在 myfun 定义时,加 extern "C"
2 定义自己的类型
typedef void * (*MYFUN)(void *);
调用时,mysun 如下类型转换 (MYFUN)myfun
1 调用 pthread_create 里 myfun 前的一对类型转换定义,因为,这种写法只适用于定义,不适用于调用时的类型转换。你的myfun定义符合要求。如果是C++ 中,在 myfun 定义时,加 extern "C"
2 定义自己的类型
typedef void * (*MYFUN)(void *);
调用时,mysun 如下类型转换 (MYFUN)myfun
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。