#include <stdlib.h> #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdint.h> #include <math.h> #include <string.h> #include <pthread.h> void printtest(char *str) { printf("printtest str=%s\n", str); } void printtest2(char *str) { printf("printtest2 =%s\n", str); } struct printst { void (*print1)(char *str); char *savestr; }; void *threadloop( void *arg ) { struct printst *printest = (struct printst *)arg; while (1) { printest->print1(printest->savestr); sleep(1); } } int print_callback( void (*print1)(char *str), char *savestr ) { /*/不能使用static和局部变量,否则函数运行结束数据释放 程序出错 需要在整个线程运行阶段进行malloc,确保数据一直有地方存放, 线程结束后才进行free */ struct printst *printest = malloc(sizeof(struct printst)); if(NULL == printest) return -1; printest->print1 = print1; printest->savestr = savestr; //printest.print1(printest.savestr); pthread_t test1; pthread_create(&test1, NULL, threadloop, printest ); //free(printest);//不能free,否则线程无法找到数据,段错误 } int main(int argc, char *argv[]) { char test[20]="have a good day"; print_callback( printtest2,test ); print_callback( printtest,test ); while(1) { sleep(1); } }
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42644.html