To be honest, I’d think that the high CPU usage is coming from your line:
do
{
Tick();
} while (!done);
Especially when there is nothing really to calculate, it just ends up running through each iteration as fast as it can.
I’d suggest to look into some IRC Libraries (the one 3ventic posted is a great one) and see how they handle incoming messages 