首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost timer -如何设置细节级别,我想要微秒?

Boost timer -如何设置细节级别,我想要微秒?
EN

Stack Overflow用户
提问于 2011-08-28 04:56:19
回答 2查看 1.7K关注 0票数 3

因此,我尝试使用boost 1.47.0创建简单的速度工作台。但是像1.423这样的结果对我来说还不够详细。我需要更详细的。如何获得tham?如何让boost::timer显示微秒?

工作台代码:

代码语言:javascript
复制
#include <iostream>
#include <boost/thread.hpp>
#include <map>
#include <boost/thread.hpp>
#include <boost/thread/locks.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>
#include <boost/random.hpp>
#include <boost/timer.hpp>
#include <boost/progress.hpp>

class TestDs 
{
public:

    virtual bool containsKey(int key)=0;
    virtual int get(int key)=0;
    virtual int put(int key, int value)=0;
    virtual int remove(int key)=0;

    virtual int size()=0;
    virtual const char* name()=0;
    virtual void print()=0;
    virtual void shutdown()=0;
};

class GeneralMap: public TestDs
{
private:

    std::map<int,int> _ds;
    mutable boost::mutex mut_;
public:
    GeneralMap() {}

    bool containsKey(int key) {
        boost::mutex::scoped_lock lock(mut_);
        if ( _ds.find(key) != _ds.end())
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    int get(int key) {
        boost::mutex::scoped_lock lock(mut_);
        return _ds[key];
    }

    int put(int key, int value) {
        boost::mutex::scoped_lock lock(mut_);
        _ds.insert(std::pair<int, int>(key,value));
        return key;
    }

    int remove(int key) {
        boost::mutex::scoped_lock lock(mut_);
        return _ds.erase(key);
    }

    int size() {
        boost::mutex::scoped_lock lock(mut_);
        return _ds.size();
    }
    const char* name() {
        return "StdMap";
    }
    void print() {}
    void shutdown() {}

};


int n;
boost::shared_mutex  tests;
boost::shared_mutex  results;
boost::random::mt19937 rng;
boost::timer timerForCaptureFame;
GeneralMap Ds;
boost::progress_display *show_progress;

void test( int i)
{
    boost::shared_lock<boost::shared_mutex> lock_r(results);
    boost::shared_lock<boost::shared_mutex> lock(tests);
    Ds.put(i, 0);
    if (Ds.containsKey(i))
    {
        Ds.get(i);
    }
    Ds.remove(i);
    ++(*show_progress);

}

void result()
{
    boost::upgrade_lock<boost::shared_mutex> lock(results);
    boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);

    std::cout <<  std::endl << "test of " << Ds.name() << " complite;" << std::endl << "test performed on " << n << " items" << std::endl << "test duration: " << timerForCaptureFame.elapsed() << std::endl;
}

void create_tests( int n)
{

    boost::upgrade_lock<boost::shared_mutex> lock(tests);
    boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);

    boost::shared_lock<boost::shared_mutex> lock_r(results);

    for(int i=0; i<n; i++)
    {
        boost::random::uniform_int_distribution<> ran = boost::random::uniform_int_distribution<>(1, n*10);
        int x = ran(rng);
        boost::thread worker(test, x);
    }
    boost::thread worker_r(result);
    timerForCaptureFame.restart();
    return;
}



int main()
{
    n = 1000;
    show_progress = new boost::progress_display(n);
    create_tests(n);
    std::cin.get();
    return 0;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-28 05:17:38

看看Boost邮件页面上的这个thread是否有帮助。

你可以看看这个Stackoverflow问题

票数 1
EN

Stack Overflow用户

发布于 2011-08-28 05:16:41

如何让boost::timer显示微秒?

Boost的定时器库依赖于C标准库clock()函数和CLOCKS_PER_SEC。你能得到的最大分辨率取决于此,所以我首先调查一下,看看你的系统是否支持微秒级的分辨率。

MSVC被设置为CLOCKS_PER_SEC == 1000,所以如果你正在编译,你将无法获得微秒级的分辨率。其他系统不支持CLOCKS_PER_SECOND == 1000000,因此您应该考虑设置固定输出格式并设置双精度:

代码语言:javascript
复制
std::cout << std::fixed << std::precision(6) << timerForCaptureFame.elapsed();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7217316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档