Вы не можете сделать это переносимо. time_t даже не обязательно является целочисленным типом. Это может быть структура или что-то еще.
Поскольку похоже, что вы устанавливаете член tv_sec для структуры timeval, почему бы вам просто не использовать правильный тип там? Это определяется как long int, поэтому вы должны сделать:
tv.tv_sec = std::numeric_limits<long int>::max();
Хотя сейчас я заметил, что POSIX говорит, что tv_sec - это time_t, хотя MSDN и GNU libc используют long int. Эти старые API времени, которые не могут даже различить длительности и моменты времени, безусловно, должны быть заменены. Если вы можете использовать C ++ 11, посмотрите std :: chrono.
В любом случае, std::numeric_limits<std::time_t>::max()
действительно дает максимальное значение time_t, даже в Windows. Проблема в том, что определение Window для timeval :: tv_sec не является time_t, как предписывает POSIX, и поэтому приведение к long int возвращает вам отрицательное число.
Однако это можно исправить в Windows, определив _USE_32BIT_TIME_T. Это приведет к тому, что определение time_t будет соответствовать типу, используемому в timeval для tv_sec, и тогда ваш std::numeric_limits<time_t>::max()
будет работать.