Making a while-loop timeout

Rather than build a timeout into your WHILE loop I suggest you don't use WHILE at all. Just use IF and allow loop() to do the iteration. That way you will only need to call Blynk.run() from loop().

For the timing issue have a look at how millis() is used to manage timing without blocking in Several things at a time. Note how each function runs very briefly and returns to loop() so the next one can be called. And there may be dozens of calls to a function before it is actually time for it to do anything.

...R