Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Время выполнения проги


Автор: 1122 17.5.2008, 17:34
Всем привет. Как сделать так, чтобы программа выполнялась только, например, 5 минут. Заранее спасибо.

Автор: archimed7592 17.5.2008, 20:05
1122, а по истечению 5-ти минут что будет(должно быть)?

Автор: 1122 17.5.2008, 20:25
Конец программы. Ну в принципе не важно, что должно быть (вывод меню на экран или еще что-нибудь). Или Например в цикле увеличивать переменную на единицу в течении пяти минут, а потом выход из цикла (или из функции, в которой цикл)....

Автор: rrrFer 17.5.2008, 20:46
1122
Цитата

Как сделать так, чтобы программа выполнялась только, например, 5 минут

Можно так(неоптимально наверно):
Код

#include<time.h>
void main(){
    time_t t1,t2;
    int i,j;
    for(i=0,time(&t1),time(&t2);difftime(t2,t1)<60*5;i++,time(&t2))
        j=i;
}

Автор: 1122 17.5.2008, 20:58
Спасибо.
А как данный пример адаптировать к задаче такого рода:
"Создать игру. С верхней части экрана падают шарики. Управляя боченком, игрок должен собрать как можно больше шаров за одну минуту."

И что возвращает функция difftime(t2,t1)? 

Автор: rrrFer 18.5.2008, 06:43
Цитата

И что возвращает функция difftime(t2,t1)? 

очевидно разность времен t2 и t1, которые определяются в момент вызова time(&t2) и time(&t1) соответственно (в секундах)
Цитата

А как данный пример адаптировать к задаче такого рода:
"Создать игру. С верхней части экрана падают шарики. Управляя боченком, игрок должен собрать как можно больше шаров за одну минуту."

Возможно так:
 
Код

 for(time(&t1),time(&t2);difftime(t2,t1)<60;time(&t2)){
         падает шарик;
    }

ну и аналогично там где идет управление бочонком

Автор: LostSoul 18.5.2008, 08:40
WinApi пользоваться можно? Если да, то такое просто реализовать с двумя потоками. В одном - ожидание 5 минут, во втором - код игры. 

Автор: rrrFer 18.5.2008, 13:37
LostSoul
создать вспомогательны процесс можно и без WinApi, выглядеть это может например так:
Код

#include <windows.h>
void main(){
    const int m=60000;
    system("cmd /c start D:\\myprocess.exe");
    Sleep(m/30);
    system("cmd /c taskkill /im myprocess.exe");
}

однако тут есть ряд проблем:
во-первых при использовании system или ShellExecute или CreateProcess или функций типа exec(например execve) -надо указывать полный путь к исполняемой программе. Путь конечно определить можно, но зачем так сложно решать задачу непонятно, или можно использовать средства командной строки для поиска этого файла - это конечно очень просто, однако рабоать будет долго...
во-вторых время будет отсчитываться только пока на этом приложении будет установлен фокус, однако "1122" пишет игру и поэтому явно фокус будет установлен именно на игре, а значит, поток отсчета времени будет вытеснен и Sleep(m/30); будет выполняться весно smile
кстати, m/30 - это 2 секунды, если тебе надо 5 минут, то пиши m*5

Автор: 1122 18.5.2008, 22:29
Спасибо. Завтра поэксперементирую!

Автор: archimed7592 18.5.2008, 23:06
Цитата(rrrFer @  18.5.2008,  13:37 Найти цитируемый пост)
-надо указывать полный путь к исполняемой программе.

Зачем? 0_о

Добавлено через 40 секунд
(я про std::system)...

Автор: rrrFer 20.5.2008, 08:24
archimed7592
Цитата

Зачем? 0_о

Код

 system("cmd /c start D:\\myprocess.exe");

а что ты предлагаешь написать тут вместо D:\\myprocess.exe?

Автор: archimed7592 20.5.2008, 14:18
Цитата(rrrFer @  18.5.2008,  13:37 Найти цитируемый пост)
однако тут есть ряд проблем:
во-первых при использовании system или ShellExecute или CreateProcess или функций типа exec(например execve) -надо указывать полный путь к исполняемой программе.

Цитата(rrrFer @  20.5.2008,  08:24 Найти цитируемый пост)
а что ты предлагаешь написать тут вместо D:\\myprocess.exe?

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

Автор: rrrFer 20.5.2008, 14:28
archimed7592
путь к исполняемой программе надо, чтобы ее исполнить

Автор: archimed7592 20.5.2008, 15:05
Цитата(rrrFer @  20.5.2008,  14:28 Найти цитируемый пост)
путь к исполняемой программе надо, чтобы ее исполнить 

Делаю 
Код
std::system("ReportGenerator");

И ничего не надо...
Со start то же самое.
Если исполняемый файл находится в текущей директории(для windows) или путь к нему находится в PATH, то, очевидно, ничего не требуется.
Другое дело, что если он не находится в текущей директории и путь к нему не присутствует в PATH, но это уже проблема не std::system, а кого-то другого.

Автор: rrrFer 20.5.2008, 15:13
ммм...
Цитата
1:
Код

std::system("ReportGenerator");


это что?

Автор: archimed7592 20.5.2008, 15:16
Цитата(rrrFer @  20.5.2008,  15:13 Найти цитируемый пост)
это что? 

Это строка из одного из моих проектов с изменённым названием исполняемого файла, дабы был ясен смысл. Я это к тому, что никаких полных путей мне писать не приходится и для меня это не проблема(пока я не создам её себе сам) smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)