Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.96
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

Таймер в консольном приложении - C++

24.09.2009, 16:12. Просмотров 3202. Ответов 17
Метки нет (Все метки)

Всем доброго времени суток, у меня вопрос, как сделать так, чтобы программа записывала текст в файл, а, к примеру через 40 минут стирала весь текст из этого файла? как можно реализовать это в таком коде?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <stdio.h>
 
int main()
{
  FILE* file;
  char* file_name = "C:\\WINDOWS\\System32\\drivers\\etc\\hosts";
 
  file = fopen(file_name, "a");
  
  if(!file)
    return 0;
 
  fseek(file, 0, SEEK_END);
  
  fputs("\n93.158.134.11 vkontakte.ru", file );
  
  fclose( file );
 
  return 0;
}
P.S. Если диска С: не существует то программа не заработает -
C++
1
char* file_name = "C:\\WINDOWS\\System32\\drivers\\etc\\hosts";
, я слышал о %systemroot%, но не знаю как это оформляется.

Заранее спасибо!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
24.09.2009, 16:23     Таймер в консольном приложении #2
selevit, удалять нельзя,можно только перезписать в другой файл результат.
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.09.2009, 16:25  [ТС]     Таймер в консольном приложении #3
спасибо, как так удалять нельзя, ведь есть же такая функция стирания всего текста из файла?
Rififi
2335 / 1050 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
24.09.2009, 16:25     Таймер в консольном приложении #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
 
int main()
{
  FILE* file;
  char* file_name = "C:\\WINDOWS\\System32\\drivers\\etc\\hosts";
 
  file = fopen(file_name, "a");
  
  if(!file)
    return 0;
 
  fseek(file, 0, SEEK_END);
  
  fputs("\n93.158.134.11 vkontakte.ru", file );
  
  fclose( file );
 
  Sleep(40 * 60 * 1000); // ждём 40 минут
 
  file = fopen(file_name, "w+t"); // стираем весь текст
  fclose(file);
 
  return 0;
}
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
24.09.2009, 16:27     Таймер в консольном приложении #5
таймер
C++
1
2
3
4
5
int i=40;
while(40!=0){
Sleep(60000);//1000=1 секунду
--i;
}
Добавлено через 59 секунд
Цитата Сообщение от Rififi Посмотреть сообщение
Sleep(40 * 60 * 1000); // ждём 40 минут
этого не знал.

selevit, так лучше,удобнее

Добавлено через 1 минуту
Rififi, а что такое file_name?
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
24.09.2009, 16:31  [ТС]     Таймер в консольном приложении #6
спасибо, еще вопрос, как сделать, чтобы консоль не висела на экране 40 минут, а просто сворачивалась в процессы?
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
24.09.2009, 18:10     Таймер в консольном приложении #7
Цитата Сообщение от МедведЪ Посмотреть сообщение
while(40!=0)
Так и Sleep никакого не нужно - само уснёт
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
24.09.2009, 22:16     Таймер в консольном приложении #8
easybudda, просто дело в том что можно выводить на экран с помощью int i-а..
то есть если слип,то нельзя узнать сколько осталось времени а если int то cout<<i;
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
24.09.2009, 23:15     Таймер в консольном приложении #9
МедведЪ,
C++
1
while ( i > 0 )
Почувствуйте разницу. У Вас бесконечный цикл получается.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.09.2009, 04:17     Таймер в консольном приложении #10
Цитата Сообщение от selevit
я слышал о %systemroot%, но не знаю как это оформляется
C
1
2
3
4
5
6
7
8
#include <stdlib.h>
 
...
 
    char *p;
 
    if ((p = getenv("systemroot")))
        printf("%s" "\n", p);
Fun4life
0 / 0 / 0
Регистрация: 21.09.2009
Сообщений: 3
25.09.2009, 04:46     Таймер в консольном приложении #11
написанный выше код напоминает мне участок хорошо знакомого всем вируса))))
осторожнее товарищи!!!!
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
25.09.2009, 15:25     Таймер в консольном приложении #12
Цитата Сообщение от easybudda Посмотреть сообщение
Почувствуйте разницу. У Вас бесконечный цикл получается.
C++
1
2
3
4
5
6
7
8
9
int i=40;
while(i!=0){
--i;
cout<<i;
system("cls");
Sleep(60*1000);
 
 
}
прокомпилируй
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
26.09.2009, 12:07     Таймер в консольном приложении #13
Цитата Сообщение от selevit Посмотреть сообщение
спасибо, еще вопрос, как сделать, чтобы консоль не висела на экране 40 минут, а просто сворачивалась в процессы?
http://vsokovikov.narod.ru/New_MSDN_...showwindow.htm
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
26.09.2009, 16:10     Таймер в консольном приложении #14
kravam, попробывал,у меня что то не то,может не правильно делаю...вот мой код
C++
1
2
3
4
5
6
7
BOOL ShowWindow(
 
HWND hWnd, SW_FORCEMINIMIZE
 
int nCmdShow  
 
);
что не так?
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
26.09.2009, 17:06     Таймер в консольном приложении #15
МедведЪ, да всё не так.
Не надо копировать объявление функции, тем более неправильно (по указанной мной ссылке 2 аргумента, а у тебя 3)

Надо подсоединить заголовочный файл, где это объявление уже прописано.
Потом правильно вызвать эту функцию.
В числе прочего разобраться с хэндлом окна. (Первый аргумент, как его найти)
Ну, то есть забить в поисковике "Как найти хэндл окна". Это нетрудно, я как-то занимался этим, хэндл окна находиться по его названию, а в случае с консолью это название есть заголовок консоли...

Короче, вот код, нашёл у себя. Сперва создаёт окно, а потом его свёртывает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define MY_BUFSIZE 1024   
#include <stdio.h>
#include <windows.h>
 
int main(){
 
 char AdresZagolovkaOkna [MY_BUFSIZE];
 char BuferDlaProverki [MY_BUFSIZE];
 HWND DeskriptorOkna;
 
 GetConsoleTitle(AdresZagolovkaOkna, MY_BUFSIZE);
 DeskriptorOkna= FindWindow(NULL, AdresZagolovkaOkna);
 
 
  getchar (); 
 
 ShowWindow (DeskriptorOkna, SW_MINIMIZE);
 
  getchar ();
  return 0;
}
Вот так свёртывайте.
Настоятельно рекомендую ознакомиться с API-функциями

GetConsoleTitle
FindWindow
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
26.09.2009, 17:17     Таймер в консольном приложении #16
kravam,
Код
Error	1	error C2664: 'GetConsoleTitleW' : cannot convert parameter 1 from 'char [1024]' to 'LPWSTR'	c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp	11	proba
Error	2	error C2664: 'FindWindowW' : cannot convert parameter 2 from 'char [1024]' to 'LPCWSTR'	c:\documents and settings\ag\my documents\visual studio 2008\projects\proba\proba\code.cpp	12	proba
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,338
26.09.2009, 17:54     Таймер в консольном приложении #17
Короче, ясно. Твоя среда не конвертирует тип char* в тип LPWSTR
(Переменная AdresZagolovkaOkna именно типа char*, а первый параметр функции GetConsoleTitle должен иметь тип LPWSTR)
что делать не знаю. Могу посоветовать попробовать объявить AdresZagolovkaOkna как указатель на любой тип (void*).
А потом при вызове GetConsoleTitle явно переопределить тип

GetConsoleTitle((char*)AdresZagolovkaOkna, MY_BUFSIZE) или
GetConsoleTitle((LPWSTR)AdresZagolovkaOkna, MY_BUFSIZE)

...А вообще, лучше посоветуйся с ребятами, у кого такая же среда программирования, как у тебя.
У меня DEV C++
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2009, 23:25     Таймер в консольном приложении
Еще ссылки по теме:

C++ Как реализовать таймер в консольном приложении?
Таймер в консольном однопоточном приложении на c++ C++
C++ WxWidgets - в консольном приложении
Вывод в консольном приложении C++
CAsyncSocket в консольном приложении C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
1158 / 440 / 22
Регистрация: 23.06.2009
Сообщений: 6,227
Завершенные тесты: 1
26.09.2009, 23:25     Таймер в консольном приложении #18
kravam, тогда щас темку открою
Yandex
Объявления
26.09.2009, 23:25     Таймер в консольном приложении
Ответ Создать тему
Опции темы

Текущее время: 11:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru