在写opencv多线程的时候用到了pthread_create()函数,
int
pthread_create(pthread_t *tidp,
const
pthread_attr_t *attr,
(
void
*)(*start_rtn)(
void
*),
void
*arg);
其中函数里最后一个变量声明为void* args。因为涉及到函数之间的传参,因此考虑将void*指针转换为string类型存放opencv图片存放路径,因为void*指针的特殊性,将void*作为中间指针变量,在string转换后的void*指针传入后,再将void* 转换为string类型,在调用的线程函数中imread(string path)。记录下来这种思路,以作以后参考。
此外还有些小问题要注意
就是(char *)后面强制转换的是空的话,可能会影响到控制台输出问题
另外在c++11之前的时候 头文件 不能char char_10[10] = "char_10";//错误 不能直接初始化
在gcc中却是带上11都没法初始化,一直报错array used as initializer
后来用string初始化,或者干脆不初始化 在其他地方
strcpy(char_10, "xxx");
string string_1 = "string_1"; string string_2 = "string_2"; char char_1 = 'char_1'; char char_2[] = "char_2";//不能在头文件定义 char char_10[10] = "char_10"; void *p1 = &string_1; void *p2 = &char_1; void *p3 = &char_10; void *p4 = (void *)string_2.c_str(); trace(string_1)//string_1 trace(char_1)//1 trace(char_10)//char_10 trace((string *)p1)//0x2cfc8c trace((char *)p2)//11 这里多出来一个1 trace((char *)p3)//char_10 trace((char *)p4)//string_2