Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将timeval成员变量复制到整数变量_C++ - Fatal编程技术网

C++ 将timeval成员变量复制到整数变量

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

我需要使用两个参数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 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
vs
int

在行为上与“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
中应该会起作用。谢谢,现在我得到了我怀疑的答案