Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 02:46   #1
AlterX
 
Регистрация: 25.04.2010
Сообщений: 6
По умолчанию Прекращение выполнения функции через N-ое количество тактов

Мне нужно ограничить выполнение функции определенным количеством таков, как это можно сделать?
AlterX вне форума Ответить с цитированием
Старый 23.05.2010, 03:17   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

if (takt > some_value) return;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 23.05.2010, 11:35   #3
AlterX
 
Регистрация: 25.04.2010
Сообщений: 6
По умолчанию

Ну это понятно, как мне отсчитать такты?
AlterX вне форума Ответить с цитированием
Старый 23.05.2010, 12:16   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

А поконкретнее?
Функция вызывается в цикле?
Или функция вызывается в нескольких местах программы и нужно вызвать ее по всей программе не больше N раз?
Или вообще имеются в виду такты процессора?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 23.05.2010, 12:59   #5
AlterX
 
Регистрация: 25.04.2010
Сообщений: 6
По умолчанию

Функция рекурсивная, организует бэктрекинг, если функция работает слишком долго, то она должна возвратить фолс.
AlterX вне форума Ответить с цитированием
Старый 23.05.2010, 13:18   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Скорее всего, необходимо использовать переменную static.
Код:
void f()
 {
 static int n = 0;
 n++;
 if (n > 10)
  return;
 f();
 }
Если нужно контролировать глубину рекурсии, то перед return ставьте
Код:
n--;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 23.05.2010, 13:22   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

В параметры функции передавайте счетчик тактов. На каждом рекурсивном шаге увеличивайте и передавайте рекурсивно этот счетчик.
Ну или без параметра можно глобальную переменную сделать и обнулять перед каждым первым вызовом рекурсивной функции
Код:
bool rec_func(int some_param, int counter)
{
   if(counter >= 100)
      return false;
   //тут проверку на выполнение основного условия функции
   return rec_func(some_param, counter+1); //рекурсивный вызов со счетчиком
}
MaTBeu вне форума Ответить с цитированием
Старый 23.05.2010, 13:33   #8
AlterX
 
Регистрация: 25.04.2010
Сообщений: 6
По умолчанию

Я уже сделал со статиком, только ограничить нужно каждый экземпляр функции, для этого я использовал вектор ограничителей, но я сделал ограничение по времени, поэтому на разных машинах программа будет работать по разному, а как ограничить по тактам я не знаю

Последний раз редактировалось AlterX; 23.05.2010 в 13:37.
AlterX вне форума Ответить с цитированием
Старый 23.05.2010, 13:37   #9
AlterX
 
Регистрация: 25.04.2010
Сообщений: 6
По умолчанию

Что-то никто не отвечает... Вопрос всё ещё открыт.

Последний раз редактировалось AlterX; 23.05.2010 в 16:47.
AlterX вне форума Ответить с цитированием
Старый 23.05.2010, 17:33   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
а как ограничить по тактам я не знаю
Вы в серьез думаете, что вам это удастся? На современных процах с их оптимизацией, конвеерами, кешами... и прочим?
Когда не уверен, что простейшие циклы будут на разных процах выполнятся за одно и то же количество тактов?
Прибавьте планировщик ОС, многозадачность, ...
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции и выполнения Romms Общие вопросы Delphi 2 27.09.2009 13:49
Как определить время выполнения конкретный функции? Alex Cones Общие вопросы Delphi 8 24.09.2009 11:42
Как в ProgressBar отобразить процесс выполнения Post запроса через Idhttp Joe_Tribbiani Работа с сетью в Delphi 8 15.06.2009 10:39
dll содержащая функции выполнения sql запросов jb_007 Помощь студентам 10 13.05.2009 13:39
Число тактов процессора VladimirVB Компьютерное железо 3 28.11.2008 20:55