考慮下面的代碼:如何將整數分配到由pthread_create調用的函數中?
void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread, &connfd);
我如何通過connfd整數到函數actThread。每路我嘗試,我得到的錯誤
考慮下面的代碼:如何將整數分配到由pthread_create調用的函數中?
void* actThread(int acc)
{
.
.
.
}
int err;
err = pthread_create(&ntid, NULL, actThread, &connfd);
我如何通過connfd整數到函數actThread。每路我嘗試,我得到的錯誤
你可以做到以下幾點:
void* actThread(void* accp)
{
int acc = (int)accp;
.
.
.
}
int connfd;
int err;
err = pthread_create(&ntid, NULL, actThread, (void*)connfd);
但是,正如我以爲你不知道你在做什麼,嘗試應用此之前,瞭解一些指針。
我可以推薦你這個問題的開端:https://stackoverflow.com/questions/4016765/tutorial-on-c-pointers
通常由phtread_create創建的線程的類型是void* function (void*)
。一個void指針可以指向任何類型的實例,也可以是一個整數。下面的例子展示瞭如何異步增加一個整數。
void* increment (void * pointer_to_int)
{
int* number = (int*) pointer_to_int;
(*number)++;
return number;
}
,那麼你可能調用線程這樣的:
pthread_t t;
int *no_answer = malloc(sizeof(int));
//check if you get an int
*no_answer = 41;
pthread_create(&t, NULL, increment, (void*)no_answer);
pthread_join(t, NULL);
printf("The answer is %d\n", *no_answer);
free(no_answer);
你首先分配一個int,並把它到一定值以上的增量在它的線程。你甚至可以用pthread_join得到返回值,但是在這段代碼中它會有點冗餘。
編輯代碼輸出The answer is 42
請注意,在這裏,你可以簡單地做'INT no_answer = 41; pthread_create(&t,NULL,increment,(void *)&no_answer);':) – Pragmateek
@Pragmateek你是絕對正確的,然而很多時候只是發送一些數據到一個線程並讓線程對這些數據進行操作,但實例應該然後在線程中釋放。 – hetepeperfan
如果函數在線程完成使用數據之前結束,我更關心本地內存超出範圍的可能性。但是在這裏,當函數加入線程時,內存位置將保持有效,至少直到線程結束。 :) – Pragmateek