Я должен сказать, я думаю, что другие два ответа в настоящее время имеют слишком низкое мнение о классах параллелизма Java. Они не дадут вам миллисекундную точность (чего ожидают «реальные» приложения реального времени), но обычно они работают достаточно хорошо. Я написал крупномасштабные коммерческие сервисы с использованием Futures и Executors, и они обычно работали в течение 10 миллисекунд ожидаемого времени, даже под нагрузкой.
Я провел этот тест как на MacOS 10.6 с Java 1.6, так и на WinXP с Java 1.6.0_22, и оба они работают как положено.
Я изменил код следующим образом, чтобы проверить точность:
long time1 = System.nanoTime();
System.out.println("Submitting");
final Future<Object> future = exec.submit(call);
try {
future.get(1000, TimeUnit.MILLISECONDS);
long time2 = System.nanoTime();
System.out.println("No timeout after " +
(time2-time1)/1000000000.0 + " seconds");
fail("expected TimeoutException");
} catch (TimeoutException ignore) {
long time2 = System.nanoTime();
System.out.println("Timed out after " +
(time2-time1)/1000000000.0 + " seconds");
}
finally {
exec.shutdown();
}
В XP это печатает «по истечении 1,002598934 секунд», а в MacOS X печатает «по истечении 1,003158 секунд». ]
Если бы оригинальный постер описывал их ОС и версию JDK, возможно, мы могли бы определить, является ли это конкретной ошибкой.
Boost.Serialization и libs11n могут это сделать. В руководстве libs11n (доступном здесь ) есть подробное сравнение этих двух.
Как сказал Тобиас, FAQ по C ++ содержит хорошую справочную информацию.
Сериализация - сложная тема, которая, вероятно, слишком сложна для простого ответа на SO. К сожалению, с C ++ вы не получите его бесплатно, как в других языках.
Для начала см. C ++ faq lite или boost .
Я не знаю, есть ли какой-либо прямой способ добиться этого. Вы можете написать отдельные методы для сериализации и десериализации методов, в которых отдельные элементы данных объекта должны быть записаны и извлечены из файла.