More complex, complete examples that do several things at once

If I have to write a system that does more than 3 or 4 things at a time on an Arduino, I use a cooperative multi tasking scheduler. It still requires discipline because you have to split each task into chunks that don't block and always complete within a few hundred microseconds. For example, when updating an LCD, you have to avoid using the clear and home functions, and only write a few characters at a time (I also modified the LiquidCrystal library to make it faster). The big advantage of using a scheduler is that it lets you keep the code for the different tasks separate.

For simpler systems, I have used blink-without-delay style timer polling for most tasks, and a tick interrupt for time-critical regular tasks such as polling rotary encoders and multiplexing displays.