2016-02-27 54 views
0

我需要在C++中使用pthreads,但是我不能使用函數pthread_create,它表明我有錯誤。另外,我需要多個參數傳遞給方法:在C++中使用pthreads

void Read(int socks, int client) { 
    while (1) { 
     int n; 
     char buffer1[256]; 
     bzero(buffer1, 256); 
     n = read(socks, buffer1, 255); 
     if (n < 0) { 
      perror("ERROR leyendo el socket"); 
      exit(1); 
     } 
     cout << "Mensaje de cliente " << client << ":" << buffer1 << endl; 
     Jsons json1; 
     json1.parseJson(buffer1); 
     writeMsg(socks, "hola\n"); 
    } 

} 

void ThreadServer::Thread(int sock, int client) { 

    pthread_attr_t attr; 
    pthread_attr_init(&attr); 
    pthread_t tid; 
    pthread_create(&tid,&attr,Read); 

} 
+0

在學習新東西時,最好的學習方法就是看一個例子。你有沒有看到,例如,LLNL教程,如[示例2](https://computing.llnl.gov/tutorials/pthreads/#PassingArguments)?多個參數通過結構傳遞,然後'pthread_create'接受4個參數。 –

回答

1

如果我理解正確的話,你希望將多個參數發送到一個線程。 pthread的線程函數採取單個void *

void threadfn(void *data); 

你只需要創建一個數據結構來保存你的參數

struct threadData 
{ 
    int param1; 
    int param2; 
}; 

聲明你的結構和分配的參數值。當您撥打pthread_create時,傳遞結構指針。

struct threadData data = {1,2}; 

pthread_create(&tid, &attr, Read, &data); 

當您在讀取函數中獲取指針後,使用它來提取參數。

void Read(void * thrData) 
{ 
    struct threadData *myParams = (struct threadData*)thrData; 
    . 
    . 
    . 
+0

呃。令人討厭的舊C接口與'void *'參數。世界是一個更好的地方與'std :: async'和'std :: future'。 – Tim