Ten también en cuenta, que cualquierespera, ya sea espera para que el disco duro lea o escriba, ya sea espera a que se reciban datos de un socket, etc, a efectos prácticos hace en parte las veces de un sleep.
Consume CPU, no memoria, si no le pones sleep en algunos bucles.
Evidentemente los bucles de algoritmos no se pueden moderar con sleeps, por cuestiones de eficiencia. Pero en este caso, si lo que se hace es esperar mensajes, no importa 10 ms de retardo en leer, y a cambio, logrará sacarle un montón de peso a la CPU.
Con esto quiero decir: pon sleeps si es necesario, no hacen mal.
Como digo, desconozco si es este el error, pero no trates de guardar en un float un número en una determinada base. Coma flotante no asegura la precisión en absoluto.
Matarlo es muy bruto. En vez de eso, cambia el while(1) por una variable que compartan, y cuando quieras que se detenga, pones esa variable a 0, por ejemplo.
Para hacerlo con consola, y querer leer de consola, lo puedes hacer con 2 threads, uno para leer la consola, y otro para trabajar el/los sockets.
De todos modos, ten en cuenta algo: si recibes un mensaje mientras escribes, la consola escribirá sobre lo que tú estás escribiendo. Para practicar está bien, pero bueno.