我正在计算进程/线程正在使用的cpu时间之间的增量,在某个函数的调用之间.
我为进程cpu时间获得了不可能的值,有时候下一次调用返回较小的cpu时间,这是不可能的.
这是我用来计算cpu时间的代码:
  u64 CpuTime::calculateCpuTime(bool a_thread)
  {
    struct rusage l_rusage;
    int retVal;
    if(a_thread)
    {
      retVal = getrusage(1, &l_rusage); //1 = RUSAGE_THREAD
    }
    else
    {
      retVal = getrusage(0, &l_rusage); //0 = RUSAGE_SELF
    }
    ASSERT(retVal==0);
    u64 userUSeconds = (static_cast<u64>(l_rusage.ru_utime.tv_sec)*1000000)+
      (static_cast<u64>(l_rusage.ru_utime.tv_usec));
    u64 systemUSeconds = (static_cast<u64>(l_rusage.ru_stime.tv_sec)*1000000)+
      (static_cast<u64>(l_rusage.ru_stime.tv_usec));
    if(a_thread)
    {
      return userUSeconds + systemUSeconds;
    }
    return (userUSeconds + systemUSeconds) / ACE_OS::num_processors_online();
  }
Run Code Online (Sandbox Code Playgroud)
计算检索它的函数也是异步的,一次不能超过1个线程访问它.
这是不可能的输出(过程)的一个例子:
2016/03/23 13:39:05.187 - #2 - 15471/15055 - ThreadDeltaCpuTime = 6000 ThreadCpuTime = 46756013 ProcessCpuTime = 39820759 deltaProcessCpuTime = 250
2016/03/23 13:39:05.386 …
当执行以下代码时:
from IPython.core import ultratb
sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1)
Run Code Online (Sandbox Code Playgroud)
为了捕获异常,我收到以下错误:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 994, in __init__
    VerboseTB.__init__(self, color_scheme=color_scheme, call_pdb=call_pdb,
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 638, in __init__
    TBTools.__init__(
  File "/Users/dinari/miniconda3/envs/testenv/lib/python3.8/site-packages/IPython/core/ultratb.py", line 242, in __init__
    self.pdb = debugger_cls()
TypeError: 'NoneType' object is not callable
Run Code Online (Sandbox Code Playgroud)
使用 python 3.8.2 和 IPython 8.4.0
pdb 否则工作正常。
有解决这个问题的想法吗?
我最近开始使用 Source Insight,为了获得正确的 //TODO - 注释,您需要编写// TODO
(带有额外的空格)。
我尝试在配置中查找删除此额外空间的方法,但找不到它,并且无法习惯用额外空间编写它。
有办法解决这个问题吗?还是应该拥抱这一点,然后慢慢地,学会珍惜?
我尝试使用scanf从用户获取大十六进制数字(12个字符)时遇到问题。
它似乎只能获取最后8个字符,例如-ABFFFFFFFF将变为0000FFFFFFFF。
这是我的代码-
unsigned long long address;
scanf("%x",&address);
printf("Address: %#014x", address);
Run Code Online (Sandbox Code Playgroud)
对于此输入:“ ABFFFFFFFF”,输出为:
地址:0x0000ffffffff
我试过用scanf格式播放,但无济于事。