Strona 1 z 1
[SOLVED]Klasa wzorcowa
: 03 sty 2009, 19:29
autor: Hauleth
Kod: Zaznacz cały
template < class T = int > class thread {
private:
void* (*func)( void* ); ///< Wskaźnik na funkcję, która ma być wątkiem.
pthread_t th; ///<
T* args; ///< Argumenty przekazywane do funkcji
thread_attr* param;
bool state; ///< status wątku
public:
/**
* @brief Konstruktor klasy @b Thread
*
* @param _func Wskaźnik do fungkcji, która ma zostać wywołana jako osobny wątek.
* @param _args Wskaźnik do argumentów, które mają zostać przekazane nowemu wątkowi
* @return
*/
thread( void*(*_func)( void* ), T* _args = NULL ) :
func( _func ), args( _args ), state( false ) {
};
int start( const thread_attr* _param = NULL ) throw(threadError) {
if ( state ) {
throw threadError( "This thread has already started." );
}
int ret = NULL;
param = (thread_attr*) _param;
ret = pthread_create( &th, param, func, (void*) args );
return ret;
}
void stop();
void join() {
pthread_join( th, NULL );
}
};
Mam taką oto klasę ? i zastanawiam się jak ją nakłonić by przyjęła jako argument wzorca char*.
Edit:
Teraz mam problem bo muszę zrobić coś takiego:
Kod: Zaznacz cały
void * test( void * params ) {
char** s = (char**)params;
/* reszta kodu */
}
I to podać konstruktorowi, ale ten kod mnie nie zadowala :/
Odp: Klasa wzorcowa
: 04 sty 2009, 15:15
autor: pinochet
rozumiem że błąd kompilacji ? spróbuj typename albo podaj bezwzględnie nazwę typu przez thread<T>*
Odp: Klasa wzorcowa
: 04 sty 2009, 19:18
autor: el.pescado
Dlaczego wskaźnika do funkcji nie zadeklarujesz jako:
?
Odp: Klasa wzorcowa
: 04 sty 2009, 20:26
autor: Hauleth
Nie nie ma błędu kompilacji. @el.pescado nie może być taka funkcja, bo to ma ułatwiać pracę z pthread, a jako argument pthread podaje się funkcję typu void* func( void* ). Obszedłem to tworząc typeneme char* cstring, ale i tak to mnie nie zadowala, jeśli nie ma innego rozwiązania, to jakoś przeżyję, ale to jak jest teraz nie za bardzo mi się podoba :/
Odp: Klasa wzorcowa
: 04 sty 2009, 20:47
autor: mikolajs
by przyjęła jako argument wzorca char*.
Zdaje się, że w takich sytuacjach dla wskaźników robi się specjalizowaną wersję klasy.
Odp: Klasa wzorcowa
: 04 sty 2009, 20:55
autor: Hauleth
A jak ją poinformować, którą klasę ma wybrać??
Odp: Klasa wzorcowa
: 04 sty 2009, 21:01
autor: mikolajs
Piszesz klasę class thread<char*> kompilator najpierw spróbuje użyć tej klasy, a dopiero jeżeli nie pasuje ona do wzroca, to wyprodukuje z szablonu. Polecam "Pasja C++"

Odp: Klasa wzorcowa
: 04 sty 2009, 22:33
autor: Hauleth
Dzięki. Muszę sobie kupić tę książkę.
PS
Biblioteka moja powoli nabiera kształtu ( ma być taką mini biblioteką ułatwiającą częste [wg mnie] prace na POSIX'ach )

Odp: [SOLVED]Klasa wzorcowa
: 05 sty 2009, 17:02
autor: mikolajs
A widziałeś commoncpp2?
Szablon w tym wypadku wydaje mi się zbędny. Lepiej jest dziedziczyć po klasie wątku. Sam korzystam czasami z wątków w QT4, które też opierają się na phtread.
Odp: [SOLVED]Klasa wzorcowa
: 05 sty 2009, 19:21
autor: Hauleth
Nie nie widziałem. Może i tak, ale ja wolę wiedzieć co i jak. Tak mam wszystko jasne i klarowne.