int main() { bank_machine bank; interface_machine interface_hardware; atm machine(bank.get_sender(),interface_hardware.get_sender()); std::thread bank_thread(&bank_machine::run,&bank); std::thread if_thread(&interface_machine::run,&interface_hardware); std::thread atm_thread(&atm::run,&machine); messaging::sender atmqueue(machine.get_sender()); bool quit_pressed=false; while(!quit_pressed) { char c=getchar(); switch(c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': atmqueue.send(digit_pressed(c)); break; case 'b': atmqueue.send(balance_pressed()); break; case 'w': atmqueue.send(withdraw_pressed(50)); break; case 'c': atmqueue.send(cancel_pressed()); break; case 'q': quit_pressed=true; break; case 'i': atmqueue.send(card_inserted("acc1234")); break; } } bank.done(); machine.done(); interface_hardware.done(); atm_thread.join(); bank_thread.join(); if_thread.join(); }