2011-03-08 81 views
-1

可能重复:
Error with passing a pointer using threads,我该怎么传进我的功能

我试图找出我进入的功能。

我不知道该怎么做,我从来没有使用过线程。
问题区域被标记。

void matrixACreate(struct a *); 

void *status; 
struct a 
{ 
    int Arow; // Matrix A  
    int Acol; // WxX 
    int low; // Range low 
    int high; 
}; 

int main(int argc, char * argv[]) 
{ 
    struct a matrix_mult_info; 

    matrix_mult_info.Arow = atoi(argv[1]); // Matrix A 
    matrix_mult_info.Acol = atoi(argv[2]); // WxX 

    matrix_mult_info.low = atoi(argv[5]); // Range low 
    matrix_mult_info.high = atoi(argv[6]); 

    pthread_t matrixAthread; 

    pthread_t runner; 
    int error, retValue; 

    //if (Acol != Brow) 
    //{ 
    // cout << " This matrix cannot be multiplied. FAIL" << endl; 
    // return 0; 
    //} 
    //HERE IS THE PROBLEM IN THE NEXT LINE: 

    error = pthread_create(&matrixAthread, NULL, matrixACreate, matrix_mult_info);  
    // I don't know what to pass as the last parameter 

    retValue = pthread_join(matrixAthread, &status); 
    return 0; 
} 

void matrixACreate(struct a *matrix) { 
    struct a *data = (struct a *) malloc(sizeof(struct a)); 
    data->Arow = matrix->Arow; 
    data->Acol = matrix->Acol; 
    int range = ((matrix->high - matrix->low) + 1); 
    cout << matrix->Arow << endl; 
    free(data); 
} 
+3

或许与所请求的信息更新http://stackoverflow.com/questions/5227087/error-with-passing-a-pointer-using-threads,而不是Ø写一个新的问题? – Erik 2011-03-08 01:52:48

回答

2

传递给你的数据的引用在螺纹:

pthread_create(&matrixAthread, NULL, matrixACreate, &matrix_mult_info); 

,然后在线程给出的最后一个参数pthread_create的参考值将是参数,你可以投的价值回传入结构的数据类型:

void *matrixACreate(void *td) 
{ 
    struct a *matrix = td; 
}