Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/20: Рейтинг темы: голосов - 20, средняя оценка - 4.75
selevit
81 / 77 / 6
Регистрация: 08.10.2008
Сообщений: 296
1

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

24.09.2009, 16:12. Просмотров 3709. Ответов 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%, но не знаю как это оформляется.

Заранее спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2009, 16:12
Ответы с готовыми решениями:

Таймер в консольном приложении
Подскажите, как сделать чтобы консольное приложение было постоянно запущено и...

Таймер в консольном однопоточном приложении на c++
Привет всем! Я только начинаю разбираться в c++, но опыт программирования все...

Как реализовать таймер в консольном приложении?
И как-нибудь без while и sleep, чтобы программа не висела. Пытался делать через...

Вывод в консольном приложении
Мне надо после 19 вернуться на прежнюю строку. Что бы после 19 числа начали...

Изображение в консольном приложении.
Помогите, пожалуйста, с загрузкой и отображением изображений формата bmp в...

17
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
24.09.2009, 16:23 2
selevit, удалять нельзя,можно только перезписать в другой файл результат.
0
selevit
81 / 77 / 6
Регистрация: 08.10.2008
Сообщений: 296
24.09.2009, 16:25  [ТС] 3
спасибо, как так удалять нельзя, ведь есть же такая функция стирания всего текста из файла?
0
Rififi
2363 / 1056 / 104
Регистрация: 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;
}
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 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?
0
selevit
81 / 77 / 6
Регистрация: 08.10.2008
Сообщений: 296
24.09.2009, 16:31  [ТС] 6
спасибо, еще вопрос, как сделать, чтобы консоль не висела на экране 40 минут, а просто сворачивалась в процессы?
0
easybudda
Модератор
Эксперт CЭксперт С++
10090 / 6001 / 1503
Регистрация: 25.07.2009
Сообщений: 11,379
24.09.2009, 18:10 7
Цитата Сообщение от МедведЪ Посмотреть сообщение
while(40!=0)
Так и Sleep никакого не нужно - само уснёт
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
24.09.2009, 22:16 8
easybudda, просто дело в том что можно выводить на экран с помощью int i-а..
то есть если слип,то нельзя узнать сколько осталось времени а если int то cout<<i;
0
easybudda
Модератор
Эксперт CЭксперт С++
10090 / 6001 / 1503
Регистрация: 25.07.2009
Сообщений: 11,379
24.09.2009, 23:15 9
МедведЪ,
C++
1
while ( i > 0 )
Почувствуйте разницу. У Вас бесконечный цикл получается.
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
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);
2
Fun4life
0 / 0 / 0
Регистрация: 21.09.2009
Сообщений: 3
25.09.2009, 04:46 11
написанный выше код напоминает мне участок хорошо знакомого всем вируса))))
осторожнее товарищи!!!!
0
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 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);
 
 
}
прокомпилируй
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
26.09.2009, 12:07 13
Цитата Сообщение от selevit Посмотреть сообщение
спасибо, еще вопрос, как сделать, чтобы консоль не висела на экране 40 минут, а просто сворачивалась в процессы?
http://vsokovikov.narod.ru/New_MSDN_API/Window/fn_showwindow.htm
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
26.09.2009, 16:10 14
kravam, попробывал,у меня что то не то,может не правильно делаю...вот мой код
C++
1
2
3
4
5
6
7
BOOL ShowWindow(
 
HWND hWnd, SW_FORCEMINIMIZE
 
int nCmdShow  
 
);
что не так?
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
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
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 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
0
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,531
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++
1
AnonymC
1179 / 462 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
26.09.2009, 23:25 18
kravam, тогда щас темку открою
0
26.09.2009, 23:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2009, 23:25

Кириллица в консольном приложении C++
Приветствую вас, дорогие друзья. Подскажите пожалуйста, какой код нужно...

MessageBox в консольном приложении
сделал так чтоб выводило текст из файла в консоль #include &quot;stdafx.h&quot;...

CAsyncSocket в консольном приложении
Пишу простейшие приложения (сервер, клиент) с использованием CAsyncSocket....


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru