EDIT: I move this post here as I think it's clearer...
Well now actually -nomultithreading disables triplebuffering in the current patch when the refresh doesn't match.
-triplebuffer now needs to be manually enabled from mame.ini (which is good in my opinion as it's the less preferred option due to its input lag).
To use triplebuffer + throttle we'd need triplebuffer to be asynchronous, but that's only possible in a multithreading environment (that's why it's disabled by the patch if -nomultithreading). However, even with multithreading on we don't get a truly asynchronous triplebuffering if throttle is also on, unless we add this other patch I suggested here:
http://forum.arcadecontrols.com/index.php?topic=106405.msg1179456#msg1179456So with this last patch, you can use nosyncrefresh + multithreading + triplebuffer to be able to run 100% with no tearing even if the refresh doesn't match (at the cost of some frameskipping).
UPDATE: Anyway, the patch's internal logic still has its flaws, we still need to figure out a way to avoid the automatic activation of vsync if the user doesn't want to, even if the refresh matches (i.e., for 3D games, where the CPU reaches its limits), and activate triplebuffer instead, that leaves more time available to cpu that -syncrefresh.
The problem here is that we can make a fully automatic system to cover all situations according to our personal taste but then it gets difficult to customize unless we add specific options (bad).
Also, what we are trying to do here is to make -syncrefresh and -triplebuffer independent things, with a very specific behaviour for each of them, that makes more sense that the default implementations in Mame.
UPDATE2: I think this logic is way simplier and can cover all situations, not fully sure though:
IF ( RESULT_VFREQ_CHANGE && !syncrefresh ) || triplebuffer
throttle 1
waitvsync 0
ELSE
throttle 0
waitvsync 1
So with this one, triplebuffer has preference over syncrefresh, so if you enable triplebuffer then it automatically disables vsync. So triplebuffer should be disabled all the time, unless you want to enable it for a particular game (pacman, tekken, etc.), and then it would turn vsync off regardless multithreading state. This means that if multithreading is on, the game will run 100% (provided the patch I mentioned is eventually added), but if it's off, the game will run at the refresh speed.