2014-01-13 2 views
0

Так что я пытаюсь присоединиться темы в цикле, но это дает мне ошибку:запрессовки нити в петле - ошибка преобразования

invalid conversion from 'pthread_t* {aka long unsigned int*}' to 'pthread_t {aka long unsigned int}'.

Коды, как показано ниже, и любая помощь будет принята с благодарностью! Спасибо заранее!

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 
#include <stdlib.h> 
#include <time.h> 
#include <pthread.h> 

int threadArray[10][10]; 
int arrayVar[2]; 

using namespace std; 

void *calc(void *arg){ 

    int startPoint = arrayVar[0]; 
    int endPoint = arrayVar[1]; 
    int newArray[10][10]; 
    int calculated; 

    for (int i = startPoint ; i < endPoint; i++){ 
    for (int j = 0; j < 10; j++){ 
     calculated = (threadArray[i][j] * 2 + 4) * 2 + 4; 
     newArray[i][j] = calculated; 
    } 
    } 

    for (int i = startPoint; i < endPoint; i++){ 
     for (int j = 0; j < 10; j++){ 
     cout << newArray[i][j] << " "; 
     } 
     cout << endl; 
    } 
    return NULL; 
} 

int main(){ 

    int rc; 
    int start = 0; 
    int end; 

    ifstream numFile; 
    numFile.open("numbers.txt"); 

    if (numFile.is_open()){ 

    for (int row = 0; row < 10; row++){ 
     std::string line; 
     std::getline(numFile, line); 

     std::stringstream iss(line); 

     for (int col = 0; col < 10; col++){ 
    std::string num; 
    std::getline(iss, num, ' '); 

    std::stringstream converter(num); 
    converter >> threadArray[row][col]; 
     } 

    } 

    cout << "Original 2D Array" << endl << endl; 
    for (int i = 0; i < 10; i++){ 
     for (int j = 0; j < 10; j++){ 
    cout << threadArray[i][j] << " "; 
     } 
     cout << endl; 
    } 

    cout << endl; 

    } 

    srand (time(NULL)); 

    const int rowArray[3] = {1, 2, 5}; 

    int arrayIndex = rand() % 3; 
    int noOfRows = (rowArray[arrayIndex]); 
    end = noOfRows; 
    int noOfThreads = 10/noOfRows; 

    pthread_t threads[noOfThreads]; 

    arrayVar[2]; 

    cout << "2D Array Altered" << endl << endl; 

    for (int t = 0; t < noOfThreads; t++){ 
     arrayVar[0] = start; 
     arrayVar[1] = end; 
     rc = pthread_create(&threads[t], NULL, calc, NULL); 
     start = start + noOfRows; 
     end = end + noOfRows; 
    } 

    for (int t = 0; t < noOfThreads; t++){ 
     rc = pthread_join(&threads[t], NULL); 
    } 
    pthread_exit(NULL); 
} 

ответ

2

Я думаю, что нити [т] на самом деле просто это PID, это целое число, и вы должны пройти по значению

pthread_join(threads[t], NULL) 
+0

Вот что это было! Большое спасибо за Вашу помощь! – 6TTW014

Смежные вопросы