Portál AbcLinuxu, 4. listopadu 2025 10:22
    int rc;
    if (rc = pthread_attr_init(&attr) != 0) {
      fprintf(stderr, "ERROR: pthread_attr_init() failed! ret = %d, %s\n", rc, strerror(rc));
    }
    if (stack_size > 0) {
      if (rc = pthread_attr_setstacksize(&attr, stack_size) != 0) {
        fprintf(stderr, "ERROR: pthread_attr_setstacksize() failed! ret = %d, %s\n", rc, strerror(rc));
      }
    }
    scheduler_start(curl, &attr);
    if (rc = pthread_attr_destroy(&attr) != 0) {
      fprintf(stderr, "ERROR: pthread_attr_destroy() failed! ret = %d, %s\n", rc, strerror(rc));
    }
Přes mnoho pokusů se mi prostě nedaří a nevím, jak to správně zadeklarovat v mé funkci a předat. 
void scheduler_init(CURL *ch, const pthread_attr_t *attr)Díky za pomoc.
Řešení dotazu:
#include <stdio.h>
typedef struct {
	int vek;
} osoba_t;
void vypis_vek(osoba_t *osoba)
{
	printf("Vek osoby: %d.\n", osoba->vek);
}
int main()
{
	osoba_t osoba;
	
	osoba.vek=5;
	
	vypis_vek(&osoba);
	
	return 0;
}
            
pthread.h:226:12: note: expected 'const union pthread_attr_t * __restrict__' but argument is of type 'const union pthread_attr_t **'
 extern int pthread_create (pthread_t *__restrict __newthread,
            ^
cc1: all warnings being treated as errors
Makefile:134: recipe for target 'all' failed
make[3]: *** [all] Error 1
            
#include <stdio.h>
#include <pthread.h>
#include <string.h>
void scheduler_start(pthread_attr_t *attr)
{
	
}
int main()
{
	pthread_attr_t attr;
    int rc;
    int stack_size=50;
    if ((rc = pthread_attr_init(&attr)) != 0) {
      fprintf(stderr, "ERROR: pthread_attr_init() failed! ret = %d, %s\n", rc, strerror(rc));
    }
    if (stack_size > 0) {
      if (rc = pthread_attr_setstacksize(&attr, stack_size) != 0) {
        fprintf(stderr, "ERROR: pthread_attr_setstacksize() failed! ret = %d, %s\n", rc, strerror(rc));
      }
    }
    scheduler_start(&attr);
    if (rc = pthread_attr_destroy(&attr) != 0) {
      fprintf(stderr, "ERROR: pthread_attr_destroy() failed! ret = %d, %s\n", rc, strerror(rc));
    }
}
            scheduler_start předáváš attr do pthread_create zase jako &attr. Tj. ukazatel na ten ukazatel, což je samozřejmě blbě.
Možná... pravděpodobně... na to aspoň vypadá ta chybová hláška. Tebe nenapadne, že by bylo dobré ukázat, co přesně děláš a na čem to řve, protože vůbec netušíš, co děláš. Tak si aspoň nevymýšlej nesmysly o tom, co bys taky napsal. Když nechápeš ukazatele, tak se o vlákna ani nepokoušej, protože to prostě nemužeš udělat správně. A protože tahle tvoje krávovina vlákna k ničemu nepotřebuje, tak je z toho konečně vyjeb.
            
            Side note: rc nebude obsahovat návratovou hovnotu z pthread_attr_init() (jak mylně naznačuje chybová hláška použití strerror()), nýbrž výsledek pohovnání návratové hovnoty s nulou, tedy vždy 0 nebo 1, páč 7 versus 14. V tomhle případě to sice nehraje (skoro) žádnou roli, ale pro pořádek by tam mělo být if ((rc = pthread_attr_init(&attr)) != 0) { ... }.
        Tiskni
            
                Sdílej:
                
                
                
                
                
                
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.