Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C与C++中线程的差异_C++_C_Pthreads_Posix_Ada - Fatal编程技术网

C与C++中线程的差异

C与C++中线程的差异,c++,c,pthreads,posix,ada,C++,C,Pthreads,Posix,Ada,因此,我能够使用Ada_函数的地址将Ada函数传递给C_函数。下面是C函数: void Create_Process(int * status, void * function) { pthread_t new_thread; //creating function with the given function and no arguments. *status = pthread_create(&new_thread, NULL, function, NUL

因此,我能够使用Ada_函数的地址将Ada函数传递给C_函数。下面是C函数:

void Create_Process(int * status, void * function) {
    pthread_t new_thread;

    //creating function with the given function and no arguments.
    *status = pthread_create(&new_thread, NULL, function, NULL);
}
这工作做得非常好。我的问题是,当我尝试在C++中使用相同的函数时。编译时失败,错误为:

error: invalid conversion from ‘void*’ to ‘void* (*)(void*)’ [-fpermissive]
*status = pthread_create(&new_thread, NULL, function, NULL);

是否有任何原因,在C中工作/编译,但不是C++?

< P>隐式类型转换在C++中比C.更严格,空隙*函数参数不能用作C++或C.…/P>中的函数指针。

C.函数原型中需要空函数*>函数> > p>隐式类型转换比C++中的要严格得多,在C++或C.….p>中,虚函数函数参数不能用作函数指针。

C.函数原型中需要空白函数*.V>*,C++中隐式类型转换所提到的

< P>比在

中要严格得多 void**函数void*

这是一个指向函数的指针,该函数接受一个void*参数并返回void*

为了消除C++中的错误,将函数更改为返回空隙*,并在没有类型转换的情况下传递它。如果不关心该值,则线程函数的返回可以是简单的返回NULL

<>从C++中直接使用C库有很多其他问题;特别是,对于可移植性,线程输入函数应该是Ext.C。如果你在2011年之前使用了该语言,那么就应该使用标准的C++线程库或Boost的实现。C++中隐式类型转换所提到的

< P>比C.

要严格得多。 void**函数void*

这是一个指向函数的指针,该函数接受一个void*参数并返回void*

为了消除C++中的错误,将函数更改为返回空隙*,并在没有类型转换的情况下传递它。如果不关心该值,则线程函数的返回可以是简单的返回NULL


<>从C++中直接使用C库有很多其他问题;特别是,对于可移植性,线程输入函数应该是Extn.C。如果你被2011年版的语言所困扰,那么,应该使用标准的C++线程库或Boost的实现。C++/C++可能是因为C和C++是不同的语言。相同的语法并不意味着相同的语义。您不应该将指向函数的指针视为指向对象的指针——它们不能保证大小相同,即使在C语言中,它们通常大小相同。C++对这些问题比较敏感;你必须显式地转换空洞*到所需的类型,而C对你来说是随意的,这也是C++程序员有时对C有怀疑的原因之一。简明地说,有很多C代码不是有效的C++代码;您的函数就是这类代码的一个例子。您的C函数似乎没有比直接使用pthread_create增加任何值。实际上,您丢失了线程id pthread\u t。@SimonWright是的,我知道。函数的其余部分不完全相同。这是为了清晰的目的。出于好奇,将艾达函数传递到pTrk的意义是什么,而不是使用本机艾达线程处理任务?可能是因为C和C++是不同的语言吗?相同的语法并不意味着相同的语义。您不应该将指向函数的指针视为指向对象的指针——它们不能保证大小相同,即使在C语言中,它们通常大小相同。C++对这些问题比较敏感;你必须显式地转换空洞*到所需的类型,而C对你来说是随意的,这也是C++程序员有时对C有怀疑的原因之一。简明地说,有很多C代码不是有效的C++代码;您的函数就是这类代码的一个例子。您的C函数似乎没有比直接使用pthread_create增加任何值。实际上,您丢失了线程id pthread\u t。@SimonWright是的,我知道。函数的其余部分不完全相同。这更多是为了清楚起见出于好奇,将艾达函数传递到p螺纹中的意义是什么,而不是使用本机艾达线程处理任务?我将如何创建一个使用C++标准线程库运行函数的线程,当我所拥有的所有都是从艾达传递的函数的地址指针时,我将如何创建一个使用C++运行函数的线程?标准线程库,当我只有从Ada传入的函数的地址指针时?