boost::chrono

chrono ライブラリ使えば問題なくミリ秒単位で取得できました。
車輪の再発明もいいところ。

#include <assert.h>

#include <boost/chrono.hpp>
#include <boost/chrono/timer.hpp>

#include <Windows.h>

int
main(){
    
    namespace chrono = boost::chrono;
    
    boost::chrono::timer<> t;
    Sleep(16);
    chrono::milliseconds    ms = chrono::duration_cast<chrono::milliseconds>(t.elapsed());
    // 16ms より短かった場合は適当に四捨五入
    ms = chrono::duration_cast<chrono::milliseconds>(ms + chrono::microseconds(500));
    assert(ms.count() == 16);

    return 0;
}

timer::elapsed() は、ナノ秒単位が返ってくるのでミリ秒単位にキャストしています。
切り捨て誤差を防止するため自分より大きい単位に代入できないみたい。
どうしてもやりたい時は、chrono::duration_cast を使用して明示的にキャストしてやります。

chrono::microseconds ms(16);
chrono::nanoseconds  ns = ms;	// 小さい単位には代入できるけど
chrono::seconds      sec1 = ms;	// 大きい単位には代入できない
                                // duration_cast を使う
chrono::seconds      sec2 = chrono::duration_cast<chrono::seconds>(ms);	


chrono ライブラリは、デフォルトの boost に入ってないので別途、導入する必要があります。
下記のダウンロードからライブラリを落としてきて、そのまま上書きすれば動きました。
※要コンパイル


[boost]
ver 1.44.0

[chrono]
ver 0.5.0
ダウンロード

[参照]
http://d.hatena.ne.jp/faith_and_brave/20080908/
http://svn.boost.org/svn/boost/sandbox/chrono/libs/chrono/doc/html/index.html