It’s not that we don’t expect fights to take a while, particularly in systems where each action takes multiple roles to resolve or when what people do matters enough that they need a moment to explain—and for everyone to make sure they understand who that particular rule works—and don’t get me started on typelag in a play-by-chat game….
But even after you take into account those sorts of delays, sometimes a fight drags on forever—and this is not a good thing. If the players are losing, frustrations are bound to flare; there’s nothing quite as unpleasant as having a failure spread out over a few hours rather than just delivered quickly. If they’re winning, the GM and even the players might start to get bored. If the sides are evenly matched, it might be a bit more interesting trying to figure out who’s going to get the first lucky hit in, but if there are any sorts of limitations on the resources and interesting tactics the players can bring to bear, at some point it’s just going to turn into “I hit it.” “I hit it.” “I hit it.” And if the fight is a standard 0 and 1, win or lose proposition, it only makes matters worse.
What’s a group to do?
If everyone agrees that it’s clear which way the battle’s going, and it’s taking far too long to get there, a fast-forward might be in order; you can agree on what the end result is likely to be, roll a few dice for whatever minor variations are left to resolve, and call it a fight. The catch to this, of course, is that it requires consensus, and that it only works if all that matters in the fight is who lives and who dies (particularly since most people aren’t going to be very interested in the possibility of their character dying being part of the montage.) It does, at least, end things quickly.
Drop in a third party! And no, I don’t mean one of those deus ex machina DMPCs often used as a way to get out of having overestimated the party’s ability to deal with this really cool monster, but someone on about the level of, or slightly less competent than, the existing parties. This might be an ally of the PCs or their opponents, a rival there to steal their victory (…or at least, it would be a victory steal if it looked like they were winning), someone else entirely whom one or more sides would have an interest in fighting instead of their actual opponents—the possibilities are endless, but the basic result is the same. They’re here to shake things up, to create a new tactical dimension to the fight, to maybe shake loose some new responses or one-liners.
Stuff happens! Basically, this serves the same purpose as dropping in a third party, only without the issues of having to shake together a new character or justify an existing one popping up here and now. Instead, something might happen like a sudden change in the weather, someone accidentally taking out a tree (assuming they haven’t been doing that the whole time anyway), a random earthquake, whatever it takes to shake things up and restore interest (and maybe, if you work that way, tilt the balance towards a more efficient or more favorable resolution).
Just because the mechanics say a fight is likely to last another four hours on top of the three it’s already taken doesn’t mean you have to deal with the same slog the entire time. If nobody wants to keep up as it stands, either find the end and follow it, or shake things up!