|
Printable Version of Topic
Click here to view this topic in its original format |
| Forums > Флейм > нужна помощь програмёров |
| Posted by: sdandrey on 14-08-2005, 17:34 |
|
возникла надобность синхронизировать таймер часами в BIOS.надо ето сделать в C++. вопрос в том как ето сделать?.если кто знает,то поделитесь идеями и опытом.спасибо |
| Posted by: FiL on 14-08-2005, 18:13 |
| ничего не понял. Что надо сделать? |
| Posted by: sdandrey on 14-08-2005, 18:44 | ||
в C ++ делается таймер : обычный цикл. например : for i= 1 to 100.нужно чтоб каждый шаг цикла делался за 0.1 секунды, при чём на любом компе.скорость выполнения цикла зависит от скорости проца.по етому ,чтоб не быть привязаным к конкретному компу надо привязать время выполнения шага цикла к часам в BIOS. проблема собственно в том и состоит как привязать время выполнения шага цикла к часам в BIOS |
| Posted by: Kastorsky on 14-08-2005, 19:58 |
| GetTickCount() спасет отца русской демократии |
| Posted by: sdandrey on 14-08-2005, 20:14 | ||
так же знающие люди посоветовали поексперементировать с командой SLEEP |
| Posted by: Vlady304 on 14-08-2005, 20:22 | ||
Это классная команда. Но с ней надо только на выходные эксперементировать. Вот я сегодня, например, в час дня проснулся. |
| Posted by: sdandrey on 14-08-2005, 20:30 |
|
и сколько милисекунд длился твой сон? код скинь |
| Posted by: izanoza on 14-08-2005, 21:07 | ||||||
Это для винды. Для Юникса использовать gettimeofday(), там всё элементарно. Отмечаешь в начале цикла текущее время, потом делаешь что тебе нужно, потом опять получаешь отметку времени, если разница меньше твоей 0.1 секунды, делаешь Sleep() на остаток времени, параметр у него в миллисекундах, поэтому переведёшь секунды в ms сам. Винды точнее спать не умеют. Для Юникса легче всего использовать select().
В принципе, ещё желательно учесть время потраченное на сам цикл и время выполнения функций по получению времени, если нужна повышенная точность. |
| Posted by: Bedolaga on 14-08-2005, 21:26 |
| Sleep не катит, насколько я помню. Глянь к нему описаловку. Если не ошибаюсь то там честно написано, что если дать Sleep(1000), то это не будет точно секунда... |
| Posted by: izanoza on 14-08-2005, 21:37 |
| A точнее на виндах всё одно не сделать. Поэтому и надо вводить поправки, пытаясь удержаться в пределах нормы. Нужно точнее, устанавливайти ось реального времени, сам я с ними не работал, окромя QNX. |
| Posted by: izanoza on 14-08-2005, 21:43 |
|
Можно конечно не вызывать Sleep(), а крутиться в цикле, получая отметки времени с помощью функции что я привёл, она достаточно точная. Но это 100% загрузка компа, если не делать в этом цикле коротельнких Sleep-ов, например. Можно наверное ещё какие-нибудь callback-и на таймер повесить и вызывать процедуру, выполняющую нужные действия периодически, но это не попадает под условия исходной задачи. Да и не делал я никогда такого. |
| Posted by: sdandrey on 14-08-2005, 21:55 |
| мне бы функцию под DOS. т.к железо, которым дання прога должна управлять, дружит только с C++ под DOS |
| Posted by: izanoza on 14-08-2005, 22:06 |
| Ну тогда только остаётся писать обработчик прерывания 21H, функция 2CH. Но так как часики тикают каждые 18.2 миллисекунды то точность этого таймера невилика, 5-6 показаний времени в секунду. Точнее никак. |
| Posted by: sdandrey on 14-08-2005, 22:11 | ||
|
| Posted by: izanoza on 14-08-2005, 22:23 |
|
Я никогда на С++ их не программировал, а на ассемблере это было давным-двно, подзабыл уже всё. Тут в общих чертах про программирование аппаратных прерываний http://www.megalib.com/books/355/ch4.htm (http://www.megalib.com/books/355/ch4.htm Здесь в серединке кое-что есть... http://emanual.ru/download/278-10.html (http://emanual.ru/download/278-10.html Погугли, ещё что найдёшь. |
| Posted by: sdandrey on 14-08-2005, 22:33 | ||
будем пробовать. |
| Posted by: Brait on 15-08-2005, 07:24 |
| А зачем именно BIOS'овские часы? Используй software'ные! Вот пример: http://www.azillionmonkeys.com/qed/timer2.txt (http://www.azillionmonkeys.com/qed/timer2.txt |
| Posted by: sdandrey on 15-08-2005, 08:08 | ||
ето то что я искал.етот код ,как раз, привязан к часам BIOS |
| Posted by: retro on 15-08-2005, 09:11 |
|
Мне тоже нужна помощь. Очень часто слышим банальную фразу: "Запустилась программа самоуничтожения"... А как на самом деле это сделать? Скажем, если в течении десяти дней я это (что-то) не отменил, то оно (вот это) начало работать. Разумеется, чтобы нигде не было следов присутствия. И что вообще должно быть? Всякие стирания-форматы не пригодны, восстановить легко и просто. Последствия должны быть радикально-необратимыми. P.S. Пожалуйста, без приколов... На самом деле серьезно. |
| Posted by: admik on 15-08-2005, 11:51 |
|
для уничтожения используются алгоритмы многократной повторной записи на это место на харде всякого мусора (например: криптуем содержимое файла, а потом на это же место на харде его записываем. повтяряем N-ое кол-во раз). К сожалению сам не писал, использую PGP для этого. вообще-то я видел несколько таких программ, но в итоге я пришел к PGPdisk, это криптованный файл, который умеет демонтироваться из системы после указанного времени простоя. api там открытый, можно из своей программы пользовать его. |
| Posted by: retro on 15-08-2005, 12:40 |
|
admik Сложновато как-то... Я больше думаю в направлении запуска того же Ghost'a, но только в качестве имиджа может служит пустая (чтобы мгновенно было)юниксовская партиция - сделать с нее имидж и написать скрипт. Шансы потом равны примерно 5-10%, а то и меньше, и с хорошими затратами. Как думаешь? Ну я, конечно, очень надеюсь на наших софтовиков, т.к. Гост и пр. вред (или бред) - не совсем то, что надо. P.S. В последнее время уровень кидаловок в Израиле достиг доселе мне неведанных размеров... |
| Posted by: admik on 15-08-2005, 12:49 |
|
retro не овсем понятна цель. если это сервак черный, его нужно прятать так, чтобы до него добрались в последнюю очередь, т.е. он успел отработать свой скрипт на уничтожение. хотя если придут подготовенными, они как правило уже знают где примерно спрятано оборудование с внутренними данными (как говорится: разведка не дремлет). ты поподробнее напиши, если не хочешь публично, давай в приват. |
| Posted by: retro on 15-08-2005, 12:56 |
|
admik Нет, все гораздо проще. Намного проще, но и намного неприятнее. Не платят денег за проделанную работу. И не собираются. Лоханулся по полной. Теперь хочу, наконец, умным стать, да видно, не судьба. |
| Posted by: admik on 15-08-2005, 13:08 |
|
встроить бэкдор или скрипт "пасхальный" (хе-хе. вот тебе работодатель и Юрьев день) это не выход. нужно думать. проще ограничить работу программы по времени. способов много. а при полном расчете выдавать им exe без ограничений. мне нужно больше вводных данных для толкового совета (послушай советы и сделай наоборот |
| Posted by: FiL on 15-08-2005, 16:19 | ||
И первые 10 гигов диска затерты достаточно неприятно. Если сделать такое два раза, то цена восстановления может превысить годовой бюджет Израиля Вот обеспечить работу такой комманды - это сложнее. Система сама по себе не очень любит, когда ее стирают |