在寫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