Вот пример, который немного более гибкий.
$('select.js-select-1').change(function(e) {
var i = $("option:selected", this).index();
var opts = $("option:gt(" + i + ")", this).clone();
$('.js-select-2 option:gt(0)').remove();
$('.js-select-2').append(opts);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="js-select-1">
<option disabled>Start date</option>
<option>08AM</option>
<option>09AM</option>
<option>10AM</option>
<option>11AM</option>
<option>12PM</option>
<option>01PM</option>
<option>02PM</option>
<option>03PM</option>
<option>04PM</option>
<option>05PM</option>
</select>
<select class="js-select-2">
<option disabled>End date</option>
</select>
Каждый раз, когда вы изменяете дату начала, она обновляет дату окончания.
Надеюсь, что это помогает.
Я не думаю, сериализируя только "некоторые потоки" программы, может работать, так как Вы столкнетесь с проблемами с синхронизацией (некоторые проблемы описаны здесь http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html). Так сохранение Вашей целой программы является единственным жизнеспособным способом получить согласованное состояние.
То, что Вы могли бы изучить, является ортогональной персистентностью. Существуют некоторые формирующие прототип реализации:
http://research.sun.com/forest/COM.Sun.Labs.Forest.doc.external_www.PJava.main.html
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.7429
Но ни один из них больше не сохраняется или получил большую привлекательность (afaik). Я предполагаю, что установка контрольных точек не является лучшим решением, в конце концов. В моем собственном http://www.siebengeisslein.org проекта я пробую подход использования легких транзакций для диспетчеризации события, таким образом, состояние потока не должно сохраняться (так как в конце транзакции, стек вызовов потока пуст снова, и если операция останавливается в середине транзакции, все откатывается, таким образом, стек вызовов потока действительно имеет значение также). Вероятно, можно реализовать что-то похожее с любым OODBMS.
Другим способом посмотреть на вещи являются продолжения (http://en.wikipedia.org/wiki/Continuation, http://jauvm.blogspot.com/). Они - способ приостановить выполнение в определенных участках кода (но они не обязательно сохраняют состояние потока).
Я надеюсь, что это дает Вам некоторые начальные точки (но нет никакого готового к использованию решения этого afaik).
Править: После чтения Ваших разъяснений: необходимо определенно изучить OODBMS. Диспетчеризируйте каждое событие в его собственной транзакции и не заботьтесь о потоках.
Это действительно походит на сохранение состояния виртуальной машины и способности восстановить его, тот же самый путь точно, что Вы хотите.
Если все, в чем Вы нуждаетесь, должно смочь запустить программу, работающую с теми же данными, которые использовало предыдущее выполнение, то только необходимо сохранить прочь и восстановить персистентные данные, точное состояние каждого потока не должно действительно иметь значения, так как это изменится настолько быстро так или иначе - и исполнительные адреса вещей будут отличаться в следующий раз. Используя базу данных должен дать Вам эту способность так или иначе.
Похоже, что Вы хотите, имеют закрытие в C++. Поскольку Вы указали, там не механизм, встроенный в язык, чтобы позволить Вам сделать это. Насколько я знаю, что это в основном невозможно сделать полностью общим способом. В целом трудно сделать на языке, который не имеет VM. Можно фальсифицировать его несколько путем выполнения чего-то как Вы, предложили в основном создать объект закрытия, который поддерживает среду выполнения / состояние. Затем наличие этого сериализирует себя, когда это находится в известном состоянии.
Вы также столкнетесь с проблемой со своими указателями функции. Функции могут быть загружены в различные адреса памяти на каждой загрузке.
Лучший подход, чем попытка сериализировать состояние программы должен был бы реализовать Катастрофический отказ Только программное обеспечение с установкой контрольных точек данных. Как Вы делаете Ваша установка контрольных точек данных будет зависеть от Вашей реализации и проблемной области.
Я полагаю, что состояние потока деталь реализации, которая является, вероятно, не соответствующей, чтобы быть сериализированной. Вы хотите сохранить состояние своих объектов - не обязательно, как они добрались, чтобы быть способом, которым они.
Как пример для того, почему Вы хотите проявить этот подход, рассмотрите обновление без хита. Если Вы - рабочая версия N своего приложения и хотите обновить до версии N+1, можно сделать настолько использующую сериализацию объекта. Однако потоки "версии N+1" идут ot отличаться от потоков версии N.
Что-то вроде этого было на самом деле предложено для Java в JSR 323:
http://tech.puredanger.com/2008/01/09/strong-mobility-for-java/
но не был принят как являющийся слишком теоретическим:
http://tech.puredanger.com/2008/01/24/jcp-votes-down-jsr-323/
Если Вы переходите по ссылкам, можно найти некоторое интересное исследование в области этой проблемы.
Вы не должны пытаться сериализировать состояние, которое Ваша программа имеет к диску. Поскольку Ваша программа никогда не будет иметь полного контроля над состоянием it, если этому не позволит операционная система, в этом случае... это - часть операционной системы.
Вы не можете гарантировать, что указатель на некоторое местоположение виртуальной памяти укажет на то же местоположение виртуальной памяти снова (за исключением свойств как heap-begin/end, стек - начинаются), потому что к программе выбором операционных систем для виртуальной памяти является indeterministic. Страницы, которые Вы запрашиваете от ОС через sbrk или высокоуровневые интерфейсы, такие как malloc, начнутся где угодно.
Лучше:
Я подозреваю, что Вы хотите к ярлыку время разработки, которое требуется для сериализирования/десериализовывания определенных структур данных, таких как связанные списки. Уверьте, что Вы пытаетесь сделать, не тривиально, и это - намного больше работы. Если Вы настаиваете на том, чтобы делать так, рассматриваете изучение кода управления памятью Вашей операционной системы и в механизмы подкачки страниц ОС.;-)
ОТРЕДАКТИРУЙТЕ из-за добавленного вопроса: дизайн, который Вы заявляете, походит на некоторый конечный автомат; свойства объектов настраиваются таким образом, что они являются сериализуемыми, указатели функции могут быть восстановлены.
Во-первых, относительно потока указывает в объектах: они только имеют значение, могут ли быть типичные параллельные проблемы программирования, такие как условия состязания и т.д. Если это так, Вам нужна функциональность синхронизации потока, такая как взаимные исключения, семафоры, и т.д. Затем можно в любое время получить доступ к свойствам, чтобы сериализировать/десериализовать и быть безопасными.
Во-вторых, относительно объектной установки: прохладные взгляды, не уверенный, если у Вас есть двоичный файл или другое объектное представление. Принятие двоичного файла: можно сериализировать их легко, если можно представить фактические структуры в памяти (который является небольшим количеством кодирования наверху). Вставьте некоторое ЗНАЧЕНИЕ ИДЕНТИФИКАТОРА КЛАССА при начинании объектов и взгляните таблица, которая указывает на фактический комплект оборудования. Посмотрите на первый sizeof (идентификатор) байты, и Вы знаете, какой вид структуры Вы имеете. Затем Вы будете знать, который структура кладет там.
При сериализации/десериализации, подход проблема как это: можно искать длину гипотетически упакованный (никакой интервал между участниками) структура, выделить тот размер и чтение-запись участники один за другим. Думайте offsetof или, если Ваш компилятор поддерживает его, просто используйте упакованные структуры.
ОТРЕДАКТИРУЙТЕ из-за полужирного базового вопроса :-) Нет, нет ни одного; не для C.