A way to avoid the missing the passing of time when the application is not active (i.e. blocked during OS modification), you can simple use an accumulation time and add to it the amount of time that has passed since the last frame - as long as that frame time is shorter than a chosen boundary.
sf::Clock;
sf::Time frameTime;
sf::Time accumulatedTime = sf::Time::Zero;
sf::Time maximumFrameTime = sf::milliseconds(200);
{
// inside main loop
frameTime = clock.restart();
if (frameTime > maximumFrameTime)
frameTime = maximumFrameTime;
accumulatedTime += frameTime;
}
Then, "accumulatedTime" is the current time passed and would never process a frame of more than 200 milli-seconds. Note that some time can be discarded in this method. Although that is the intention for this method, it may be unwanted in some cases (real-time timing, for example).