Hola.
Estoy probando eso de los threads en Linux con la programación en C para hacer un servidor de mensajes multicliente. El problema con el que me topo es:
1. La función para pasar el thread solo me permite pasar el argumento como void *.
2. La función no me permite pasar más de un argumento.
¿Me podríais ayudar?
He estado probando con la conversión clasica tal que así:
#include<stdint.h>
...
void funcion(void *numero){
int a=(intptr_t)numero;
...
Al imprimirlo dentro de 'función' me devulve un valor aleatorio.
Gracias de antemano.
Tal vez te falta dereferenciar el puntero:
int a = *(int*)numero;
numero es un puntero, y tu quieres coger el contenido al que apunta numero, no el contenido de numero (la dirección), entonces debes cambiar esa línea por algo tipo int a = *(intptr_t*)numero;
si luego lo imprimes por ejemplo usando printf veras que es el valor correcto, por ejemplo el sigiente código imprimirá 123
#include <stdio.h>
#include <stdint.h>
void funcion(void *numero) {
int a = *(intptr_t*)numero;
printf("%d", a);
}
int main() {
int n = 123;
funcion((void*)&n);
}
Como decia MAFUs, vamos...
Cita de: Stakewinner00 en 16 Noviembre 2015, 21:35 PM
numero es un puntero, y tu quieres coger el contenido al que apunta numero, no el contenido de numero (la dirección), entonces debes cambiar esa línea por algo tipo int a = *(intptr_t*)numero;
si luego lo imprimes por ejemplo usando printf veras que es el valor correcto, por ejemplo el sigiente código imprimirá 123
#include <stdio.h>
#include <stdint.h>
void funcion(void *numero) {
int a = *(intptr_t*)numero;
printf("%d", a);
}
int main() {
int n = 123;
funcion((void*)&n);
}
Como decia MAFUs, vamos...
Vale, solucionado, gracias