C++ 将timeval成员变量复制到整数变量
我需要使用两个参数p1和p2来表示C++ 将timeval成员变量复制到整数变量,c++,C++,我需要使用两个参数p1和p2来表示timeval结构。 我已将tv\u sec复制到p1,并将tv\u usec复制到p2。 在32位(centos)sizeof(long)=sizeof(int)中,因此我能够做上述事情 但在64位系统中,(sizeof(tv_sec)=8) 在64位系统中,如何将此tv_sec分配给p1和p2作为32位系统的分配 我的代码如下所示 #include <iostream> #include <sys/time.h> using name
timeval
结构。
我已将tv\u sec
复制到p1,并将tv\u usec
复制到p2。
在32位(centos)sizeof(long)=sizeof(int)
中,因此我能够做上述事情
但在64位系统中,(sizeof(tv_sec)=8)
在64位系统中,如何将此tv_sec
分配给p1和p2作为32位系统的分配
我的代码如下所示
#include <iostream>
#include <sys/time.h>
using namespace std;
int main()
{
struct timeval mytime;
gettimeofday(&mytime, NULL);
cout << "tv_sec_1 : " << mytime.tv_sec << endl;
cout << "tv_usec_1 : " << mytime.tv_usec << endl;
int p1 = mytime.tv_sec;
int p2 = mytime.tv_usec;
}
#包括
#包括
使用名称空间std;
int main()
{
结构timeval-mytime;
gettimeofday(&mytime,NULL);
couttv_sec
和tv_usec的大小可以根据您所使用的系统而变化。为了避免这种情况,您不应该使用int
来存储它们的值。您应该使用适当的类型,即time_t
和suseconds_t
您的代码应该是:
time_t p1 = mytime.tv_sec;
suseconds_t p2 = mytime.tv_usec;
可在手册和信息页面中找到相关信息。其中包含有关正确使用时间函数的信息。特别是关于time\u t
vsint
:
在行为上与“int”完全相同。您可以指定int值
设置为时间变量,反之亦然,并使用
%d格式以及所有内容。
在未来,要么时间t将不再与int相同,要么
“int”的含义将从4字节整数更改为8字节整数
由于Mike Seymour的评论,我修改了我的原始答案,使之更加完整/正确。
time\u t
也不一定适用于微秒,这就是为什么它在timeval
中有一个不同类型的suseconds\u t
。我有一个项目,结果通过一个结构传递出去。在在结果结构中未使用的teger参数。我的目标是使用这些未使用的整数传递此timeval,而不修改结果结构。在上述情况下,p1和p2是未使用的整数参数。我很困惑。gettimeofday()
tv\u usec值始终为零。无论大小,tv\u usec始终为0的可能性都不大。您是否绝对确定调用了gettimeofday(&mytime,NULL)在这种情况下,在访问mytime
之前,这里似乎有一个编码错误,超出了您在提供的示例中显示的范围。对不起,tv_usec值不总是0,我的代码中有错误tv_usec
是微秒,因此将是一个从0到999999的数字。这应该适合整数。如果tv_sec
存储为有符号32位整数,最高可达2^31-1(2147483647)。这对2038-01-19 3:14:07 UTC之后的日期提出了一个问题,因为它将变成一个负数,并返回到1901年底。如果您不关心2038-01-19之后的事情,那么存储在int
中应该会起作用。谢谢,现在我得到了我怀疑的答案