Этот анализ проблемы на самом деле не дает единственного ответа, но он был слишком длинным, чтобы уместиться в комментарии, так что здесь.
После просмотра вашего кода, кажется, что проблема в том, что конец <начало </strong>.Но end = time (0) всегда вызывается после start = time (0) .
В вашем примере предполагается, что вы можете вычесть time_t значения и получить прошедшие секунды между ними, но стандарт C не гарантирует этого.Кажется, ваш код работает в последней версии Linux, поэтому я взглянул на руководство по GNU Libc , и, по-видимому, time возвращает количество секунд с 00:00:00 по1 января 1970 года, а time_t это длинный int.Я также проверил значения start и end , когда возникла проблема, и их значения составляют около 49 лет с секунд, и с тех пор, как с 1 января 1970 года прошло 49 лет,похоже, что в вашем примере предположение верно.
Мое лучшее предположение состоит в том, что есть существенная разница между реальным кодом и вашим примером.Возможно, вызов start = time (0) , который происходит после вызова end = time (0) , или, возможно, ситуации, когда вызов end = time (0) делаетне происходит.
Вы можете исключить это, преобразовав свой пример в реальную программу и посмотреть, есть ли у этой программы такая же проблема.Если это так, вы можете опубликовать код для программы.Этот сайт призывает людей создавать Минимальные, полные и проверяемые примеры .
Тем временем я могу сделать еще несколько предположений:
- Ваша программа содержит большечем один поток, и ваши потоки наступают друг на друга.
- Некоторая странная оптимизация компилятора вызывает перемещение вызовов time (0) .