如何實現一個帶有可變參數(n個參數)的函數,例如:void * thre(int,...);在pthread_create內部(& thr,NULL,thre,???) 提前致謝。pthread_create()中帶有可變參數的函數?
0
A
回答
1
設置了線程處理函數的原型。它必須是void* (*)(void*)
。你不能傳遞一個接受別的東西的函數,即使是在投射時也是如此,因爲這將是未定義行爲的原因。
但POSIX允許你單個參數void*
,這個參數足以傳遞任何東西的地址,因此不是那種限制。
所以,如果你想傳遞一些額外的參數,他們捆綁在一個結構:
struct my_data {
int n;
char c;
double d;
};
void *variable_argument_function (int first_arg, ...) {
return NULL;
}
void* handler(void *vdata) {
struct my_data *data = vdata;
return variable_argument_function(data->n,
data->c,
data->d);
//use data->n, data->c, data->d
}
int main(void) {
struct my_data t_data = {
.n = 1, .c = 'a', .d = 3.14
};
pthread_t t;
if (pthread_create(&t, NULL, &handler, &t_data) == 0)
pthread_join(t, NULL);
return 0;
}
+0
@YasserNezzari - 如果我收集正確,那麼是的。就像我在更新的代碼片段中那樣做。 – StoryTeller
+0
非常感謝你,這就是我需要的! –
相關問題
- 1. 新函數()帶有可變參數
- 2. 可變參數函數(不帶參數!)
- 3. pthread_create參數函數指針
- 4. pthread_create沒有參數?
- 5. 帶有可變參數的函數作爲函數C++的參數
- 6. 帶有可變參數的函數作爲另一個函數的參數
- 7. 在C中帶有可變參數的函數的包裝器
- 8. 帶有(未知)可變數量參數的調用函數?
- 9. lua中帶有可變參數的pcall
- 10. 帶有可變數量參數的wp_query
- 11. 帶有可變函數參數的分段錯誤
- 12. 帶有可變參數模板的函數
- 13. 在在pthread_create函數第四個參數
- 14. 參數傳遞給在pthread_create函數
- 15. Ruby參數帶可變參數的SyntaxError
- 16. 具有可變參數的MySQL函數
- 17. 可變參數模板構造函數不帶x參數
- 18. 調用函數帶有可變參數長度
- 19. 沒有`帶有可變參數列表
- 20. C,帶有可變參數的功能
- 21. scala中的構造函數,帶可變參數
- 22. Java的可變參數函數參數
- 23. 如何在JavaScript中創建一個可變參數(帶有可變長度參數列表)函數包裝
- 24. 調用帶有一個成員函數可變參數模板函數基於
- 25. 在pthread_create中指定的函數中釋放參數
- 26. 在Javascript中使用可變參數函數調用可變參數函數?
- 27. 如何在帶參數的函數中調用變量函數?
- 28. jQuery $ .when()帶有可變參數
- 29. 帶有可變參數功能
- 30. C中的可變參數函數
我不太確定你想要什麼,但解決的辦法可能是使用軟件工程的基本定理:添加一個間接的級別。 – StoryTeller
NVM,覺得我明白了。 – StoryTeller