#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#include <stdio.h>
int bap=0x03FC; //базовый адрес регистра порта
unsigned int t; //время
//функция вывода логической 1 (+15 В)
void logic1()
{
cout<<"Writing logical 1 to com\n\n...\n"<<endl;
outportb(bap, 1);
clreol();
}
//функция вывода логического 0 (-15 В)
void logic0()
{
cout<<"Writing logical 0 to com\n\n...\n"<<endl;
outportb(bap, 0);
}
//функция получения из файла time.txt значения времени t
void time()
{
fstream timefile;
timefile.open("time.txt",ios::in);
//запись времени t в сек в программу из файла
timefile>>t;
timefile.close();
}
//функция для вывода меню
void menu()
{
cout<<"Select operation:"<<endl;
cout<<"press '1' to write logical 1/0 to com"<<endl;
cout<<"press '9' to exit"<<endl;
cout<<"\nVremya (sec) t = "<<t<<"\n"<<endl;
}
main()
{
time();
menu();
while(1)
{
switch(getch())
{
case '1':
while(!kbhit())
{
//запись логической 1 (+15 В)
logic1();
for(unsigned int d=1;d<=t;d++)
{
cout<<"proshlo vremeni (sec): "<<d<<endl;
delay(1000);
//запись в файл time.txt текущей даты и времени и
//прошедшего с начала времени в сек
fstream timefile;
timefile.open("time.txt",ios::out);
struct time timet;
struct dosdate_t dost;
gettime(&timet);
_dos_getdate(&dost);
printf("%02d.%02d.%02d %02d:%02d:%02d\n",
dost.day, dost.month, dost.year,
timet.ti_hour, timet.ti_min, timet.ti_sec);
unsigned int day=dost.day;
unsigned int month=dost.month;
unsigned int year=dost.year;
unsigned int hour=timet.ti_hour;
unsigned int min=timet.ti_min;
unsigned int sec=timet.ti_sec;
//если число меньше 10, ставим перед цифрой 0.
timefile<<"время (сек): "<<t<<"\n\nтекущая дата и время:";
if(dost.day<=9){timefile<<"\n"<<"0"<<day;}
else {timefile<<"\n"<<day;}
if(dost.month<=9){timefile<<"."<<"0"<<month;}
else {timefile<<t<<"."<<month;}
timefile<<"."<<year;
if(timet.ti_hour<=9){timefile<<" "<<"0"<<hour;}
else {timefile<<" "<<hour;}
if(timet.ti_min<=9){timefile<<":"<<"0"<<min;}
else {timefile<<":"<<min;}
if(timet.ti_sec<=9){timefile<<":"<<"0"<<sec;}
else {timefile<<":"<<sec;}
timefile<<"\n\nработа\nпрошло времени (сек): "<<d<<endl;
//если нажали клавишу, то возврат в меню
cout<<"\npress any key to stop writing"<<endl;
if(kbhit()) {goto M;}
}
clreol();
//запись логического 0
logic0();
for(unsigned int d=1;d<=t;d++)
{
cout<<"proshlo vremeni (sec): "<<d<<endl;
delay(1000);
//запись в файл time.txt текущей даты и времени и
//прошедшего с начала времени в сек
fstream timefile;
timefile.open("time.txt",ios::out);
struct time timet;
struct dosdate_t dost;
gettime(&timet);
_dos_getdate(&dost);
printf("%02d.%02d.%02d %02d:%02d:%02d\n",
dost.day, dost.month, dost.year,
timet.ti_hour, timet.ti_min, timet.ti_sec);
unsigned int day=dost.day;
unsigned int month=dost.month;
unsigned int year=dost.year;
unsigned int hour=timet.ti_hour;
unsigned int min=timet.ti_min;
unsigned int sec=timet.ti_sec;
//если число меньше 10, ставим перед цифрой 0.
timefile<<"время (сек): "<<t<<"\n\nтекущая дата и время:";
if(dost.day<=9){timefile<<"\n"<<"0"<<day;}
else {timefile<<"\n"<<day;}
if(dost.month<=9){timefile<<"."<<"0"<<month;}
else {timefile<<t<<"."<<month;}
timefile<<"."<<year;
if(timet.ti_hour<=9){timefile<<" "<<"0"<<hour;}
else {timefile<<" "<<hour;}
if(timet.ti_min<=9){timefile<<":"<<"0"<<min;}
else {timefile<<":"<<min;}
if(timet.ti_sec<=9){timefile<<":"<<"0"<<sec;}
else {timefile<<":"<<sec;}
timefile<<"\n\nстоп\nпрошло времени (сек): "<<d<<endl;
//если нажали клавишу, то возврат в меню
cout<<"\npress any key to stop writing"<<endl;
if(kbhit()) {goto M;}
//запись логического 0 (-15 В)
}
}
M:
clrscr(); //очистка экрана
menu(); //вывод меню
break;
case '9':
exit(0);
break;
}
}
}
Почему процессор грузится на 99%
Есть программа на Borland C++: к com-порту подключается устройство(не важно какое именно), и с помощью программы на один из выводов порта посылается логическая 1 или 0; все это происходит с определенным промежутком времени, которое определяется из текстового файла. Кроме того в этот же файл во время работы программы записывается текущаая дата и время, а также время, прошедшее с начала работы.
Программа работает в досе.
Так вот, когда программа работает, то процессор грузится на 99 %.
Почему так происходит и можно ли уменьшить загрузку процессора?
А еще лучше приведи текст программы, т.к. скил экстрасенса мало у кого прокачан, чтоб ответить тебе.
п.с. я хочу кушать, а на работу добираюсь автобусом(неважно каким). В обед поел, а окно заклинило, не знаешь почему и как с этим бороться?
Код:
#include <stdio.h>;
#include <dos.h>
#include <iostream.h>
void main() {
int i;
for (i = 0; i < 10; ++i){
delay(5000);
cout << i;;
}
}
#include <dos.h>
#include <iostream.h>
void main() {
int i;
for (i = 0; i < 10; ++i){
delay(5000);
cout << i;;
}
}
И задежки выполняются и не делает ничево, а процесор загружен :).
Дело в delay. Если тебе надо снять нагрузку с процессора можно попробовать перехватывать преривание таймера. Одним словом, проблему я показал, а как с етим бороться возможно потскажут люди которые умнее меня.
Вот здесь про все регистры расписано, но зачем тебе на таком низком уровне работать, ты же не на асме пишешь?Сюда сходи
Не очень понятно, что ты хочешь. Но если тебе надо с ком-портом работать то какие-то методы у тебя старнные.
делай sleep/Sleep потоку. )
разобрался ч0 к чему.
и сделай в коде Sleep(1);
и прога не заметит - и проц будет 0% кушать - это уже пройденный этап.
а в дельфях и борланд сях - чтото типа ProcessMessages() надо сделать!
Цитата: sja
а в дельфях и борланд сях - чтото типа ProcessMessages() надо сделать!
Бугага ))