while(startime-millis() > e)
Like Paul says you've just created a delay. The sketch is stuck in that loop until it's finished. Anytime the code gets stuck in a block or on a statement it is said to be blocking. You don't want this. delay() has its uses but I've found that if I need a delay of more than 100 millis I rethink my problem. Arduino can do a lot in 100 millis.
We use a conditional statement to see if we need to change a pin's state. Once a pin is written LOW or HIGH it will stay that way until your sketch changes it.
// this just checks if the duration, e ( a really poor variable name), has passed
// if it has then the pin is written LOW otherwise it just goes on to other things. Like checking on the other relay.
if (millis() - startime >= e)
You'll find that you can't simply make this change and have it work. It will turn your relay back on right away. Probably need another variable to keep the machine's state so you can skip turning the relays on if the relays are on.
You're getting close.