pthread_create 报函数参数不匹配问题

pthread_create方法遇到类方法时总会报  argument of type ‘void* (Thread::)(void*)’ does not match ‘void* (*)(void*)’
pthread_create方法第三个参数只能是C函数指针或者类到静态函数指针。
下面记录一下解决方法

 

 1 include <stdio.h>
 2 #include <pthread.h>
 3 #include <unistd.h>
 4
 5 class Thread{
 6 public:
 7     Thread(int num = 5):_num(num){ }
 8
 9     static void *work(void *args){  //静态函数有访问函数, 变量限制, 这里直接传入类指针变量
10         Thread *handle = (Thread*)args;
11         for (int i = 0; i < handle->_num; ++i){
12             printf("sleep i = %d\n", i);
13             sleep(1);
14         }
15         pthread_exit(NULL);
16     }
17
18     int _num;
19 };
20
21 void *inc_count(void *args){
22     for (int i = 0; i < 5; ++i){
23         printf("inc_count i = %d\n", i);
24         sleep(1);
25     }
26     pthread_exit(NULL);
27 }
28
29 int main(){
30     Thread obj;
31     pthread_t threads[2];
32
33     pthread_create(&threads[0], NULL, inc_count, NULL);     //必须是C函数指针
34     pthread_create(&threads[1], NULL, Thread::work, &obj);  //或者时类静态函数指针
35     obj._num = 10;
36
37     pthread_join(threads[0], NULL);
38     pthread_join(threads[1], NULL);
39     return 0;
40 }
时间: 2024-10-01 06:58:52

pthread_create 报函数参数不匹配问题的相关文章

c#-C#调用C DLL(char *传出参数)时,报错参数不匹配

问题描述 C#调用C DLL(char *传出参数)时,报错参数不匹配 public class LLht { //手持机下载上传 [DllImport(""llht.dll"" CallingConvention = CallingConvention.StdCall CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)] public static extern int llht_dow

c++-C#调用C++生成的dll时,报错参数不匹配

问题描述 C#调用C++生成的dll时,报错参数不匹配 C++代码 int WINAPI ilbc_encoder(short pin,unsigned char pout) { int k; float block[BLOCKL_MAX]; /* convert signal to float */ for (k=0; k<iLBCenc_inst.blockl; k++) block[k] = (float)pin[k]; /* do the actual encoding */ iLBC_

将指向结构体对象的指针作为函数参数,调用p-&amp;amp;gt;时调试报错

问题描述 将指向结构体对象的指针作为函数参数,调用p->时调试报错 void deleteelement(linearlist *list, int power) { linearlist *p = list; while (p->power != power && p->next != NULL) //调试时显示错误在这一行 { p = p->next; } if (p->power == power) { linearlist *dele = p; p =

为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么?

问题描述 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 解决方案 有默认参数这个东东,所以有可能存在参数写少了不会报错:但写多了,是一定会报错的.

【求助】asp.net点击页面报 参数不匹配和 拒绝访问报错误是怎么回事?

问题描述 我点击页面的时候总是弹出参数不匹配和拒绝访问的警告错误,查了很多也看到别人也有我这种错误,可是还是没有解决.希望大家帮帮忙看看. 解决方案 解决方案二: 有些DOM或者JS里面变量为空之类引起的.你直接浏览看有没有问题.应该不影响运行的

各种python函数参数的定义和解析浅析

python 中的函数参数是赋值式的传递的,函数的使用中要注意两个方面:1.函数参数的定义过程,2.函数参数在调用过程中是如何解析的.首先说一下在python 中的函数调用过程是分四种方式的,这里且先说五种,第五种已经在以前的文章中说过了. 1.参数枚举的函数定义: >>> def Fun(a,b,c): return (a,b,c) >>> Fun(1,2,3) (1, 2, 3) >>> Fun(1,2) # 枚举参数个数不对应 Traceback

PowerShell函数参数设置为即可选又必选的方法_PowerShell

本文介绍PowerShell自定义函数中使用参数集时,可以将同一个参数既设置为可选,又设置为必选. 好吧,小编承认,这个话题有点无聊,但确实还是有点有趣,不妨看一看啦. 在PowerShell中,我们有可能有这样的需求,如果只需要输入某个参数时,这个参数是可选的.但如果还要输入别的参数,那这个参数就变成必选的了.那么这种需求如何来满足呢?那就是本文的意义所在了. 复制代码 代码如下: function Connect-Somewhere {     [CmdletBinding(DefaultP

asp.net中mvc使用ajax提交参数的匹配问题解决探讨

本文为大家介绍下使用javaScript解决asp.net中mvc使用ajax提交参数的匹配问题,遇到类似情况的朋友可以参考下,希望对大家有所帮助   想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发 生取不到值的情况,当然网上也有很多解决的例子,但都是在服务端想办法来解决的(比如将json转换为字符串,再在服务端反序列化为一个对象),为何不能 在客户端就把这个问题搞定. 其实问题没那么复杂,那是因为

python 函数参数的传递(参数带星号的说明)

原创地址:http://www.cnblogs.com/smiler/archive/2010/08/02/1790132.html python中函数参数的传递是通过赋值来传递的. 函数参数的使用又有俩个方面值得注意: 1.函数参数是如何定义的  2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要有四种方式:1.F(arg1,arg2,...)这 是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必