Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wektor wskaźników do przesłania wyniku z osobnego wątku.

Ostatnio zmodyfikowano 2014-07-26 12:22
Autor Wiadomość
kkingstoun
Temat założony przez niniejszego użytkownika
[C++] Wektor wskaźników do przesłania wyniku z osobnego wątku.
» 2014-07-26 11:06:00
Witam,

uczę się programowania wielowątkowego, gdzie moim celem jest utworzenie nowego wątku, wykonaniu w nim kilku operacji i zwrócenie tablicy (vector).
C/C++
void * odczyt( void * i ) {
    int a = *(( int * ) i );
    const string plike = "/home/poznan/PBS/Inula/symulacja/" + lisp[ a ];
    char * y = new char[ plike.length() + 1 ];
    std::strcpy( y, plike.c_str() );
    ifstream file( y );
    string line;
    std::vector < std::string > strs;
    vector < vector < double > * >* matr; //<- w tym momencie już brudzę, ponieważ staram się zwrócić tę tablicę.
    int wier = 0;
    while( std::getline( file, line ) && !line.empty() )
    {
        strs = string_split( line, ' ' );
        matr->push_back( new vector < double > );
        for( int ptk = 0; ptk < strs.size(); ++ptk ) {
            string num;
            num = strs[ ptk ];
            double temp = atof( num.c_str() );
            matr->at( wier )->push_back( temp );
        }
        wier++;
    }
    cout << endl << plike << endl;
    return matr;
}

pthread_create( & id[ i ], NULL, odczyt, ar[ i ] );
vector < vector < double > * > wynik;
pthread_join( id[ i ],( void ** ) & wynik );

Czy ktoś mógłby mi podpowiedzieć a) jak wpisywać do takiej tablicy wartości? Problem mam w tym miejscu " matr->push_back(new vector <double>);" albo bezpośrednio jak zwrócić vector.
P-114403
Monika90
» 2014-07-26 11:37:53
Może użyj C++, czyli std::async i std::future.

C/C++
char * y = new char[ plike.length() + 1 ];
std::strcpy( y, plike.c_str() );
po co to new i strcpy?

C/C++
vector < vector < double > * >* matr;
wskaźnik do wektora wskaźników do wektora double... przesadziłeś z tymi gwiazdkami, naprawdę.
Zmienna matr jest niezainicjalizowana, więc w tym miejscu:
matr->push_back( new vector < double > );
 dojdzie do katastrofy...
P-114404
kkingstoun
Temat założony przez niniejszego użytkownika
» 2014-07-26 12:22:01
"Może użyj C++, czyli std::async i std::future."


Ha, że też tego nie znałem! Z tego co widzę na pierwszy rzut oka, to to jest znacznie wydajniejsze i łatwiejsze w użyciu dziękuję!

P-114413
« 1 »
  Strona 1 z 1