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

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

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2017, 13:11   #1
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию Программа для мониторинга

Здравствуйте форумчане, хочу обратиться за советом. Т. к. я новичок в этом деле не знаю с чего начать.
Есть задача, сделать прогу которая будет мониторить приложение которое запускается через консоль, а точнее не само приложение, а температуру видеокарты во время работы этого приложения и при достижении определенной температуры, нужно перезагружать это приложение.
Это вообще как то можно реализовать? Подскажите пожалуйста.
(пишу в раздел по java потому что занимаюсь пока только java)

Последний раз редактировалось Evdar; 01.09.2017 в 13:14.
Evdar вне форума Ответить с цитированием
Старый 04.09.2017, 18:43   #2
alexey_kip
Форумчанин
 
Регистрация: 19.11.2011
Сообщений: 198
По умолчанию

Вопрос из серии "Как вилами забивать гвозди". Да никак, возьмите молоток.
Java не для этого вообще была придумана.
Используйте C.
alexey_kip вне форума Ответить с цитированием
Старый 04.09.2017, 20:59   #3
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Спасибо за ответ, попробую)
Цитата:
Сообщение от alexey_kip Посмотреть сообщение
Используйте C
Evdar вне форума Ответить с цитированием
Старый 04.09.2017, 21:18   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Получить температуру видеокарты вообще не так-то просто. Как минимум это по-разному делается для Нвидии и АМД.

Я бы искал какую-нибудь готовую утилиту типа GPU-Z, которая предоставляет какое-нибудь API или умеет работать из командной строки или пишет лог в файл и использовал бы это. Тогда и С не нужен.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.09.2017, 21:21   #5
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Я бы искал какую-нибудь готовую утилиту типа GPU-Z
Как раз так и попробовал сделать.
Взял прогу gpu-z,вытягиваю из блокнота данные о температуре, и для начала просто проверяю, если выше ноля то завершаю программу. Вопрос в чем. Как сделать так что бы не нужно было в ручную удалять все данные из лога проги? Что бы проверка начиналась с текущего времени, а не с начала. Удалять все данные лога перед проверкой? Или какой то другой способ?
Вот небольшой код
Код:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
 
public class Main {
 
    private static String FILE_NAME = "C:\\GPU-Z Sensor Log.txt";
 
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME))) {
            String c;
            while ((c = reader.readLine()) != null) {
                String[] line = c.split(",");              // Разбиваем строку на массив
                double number = Double.parseDouble(line[3].trim()); // 4 столбец это температура, берем именно его и убераем все пробелы
                if (number > 0) {
                    System.out.println("Close program!");
                    System.exit(0);
                }
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}
Evdar вне форума Ответить с цитированием
Старый 04.09.2017, 21:28   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Смотря как пишет, можно например seek в почти конец файла и читать оттуда.
В линуксах есть утилита tail для подобного, читает указанное число строк с конца (наверно читает небольшими порциями считая \n).

Но можно и просто удалять файл периодически (если GPU-Z не упадет от этого), например раз в минуту.
В цикл кстати паузу стоит добавить чтоб не читать 100500 раз в секунду.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.09.2017, 21:30   #7
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Попробовал полностью удалять все из файла перед проверкой, gpu не падает,все нормально. И да, надо бы паузу сделать
Evdar вне форума Ответить с цитированием
Старый 04.09.2017, 21:52   #8
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

Добавил блок try-catch для удаления данных из файла и паузу перед считыванием данных из файла.

Код:
import java.io.*;
import java.util.concurrent.TimeUnit;

public class Main {

    private static String FILE_NAME = "C:\\GPU-Z Sensor Log.txt";

    public static void main(String[] args) throws IOException, InterruptedException {
        try {
            FileWriter fstream1 = new FileWriter(FILE_NAME);// конструктор с одним параметром - для перезаписи
            BufferedWriter out1 = new BufferedWriter(fstream1); //  создаём буферезированный поток
            out1.write(""); // очищаем, перезаписав поверх пустую строку
            out1.close(); // закрываем
            System.out.println("File is clear!");
        } catch (Exception e) {
            System.err.println("Error in file cleaning: " + e.getMessage());
        }


        try (BufferedReader reader = new BufferedReader(new FileReader(FILE_NAME))) {
            String c;
            TimeUnit.SECONDS.sleep(1);
            while ((c = reader.readLine()) != null) {
                TimeUnit.SECONDS.sleep(1);
                String[] line = c.split(",");              // Разбиваем строку на массив
                double number = Double.parseDouble(line[3].trim()); // 4 столбец это температура, берем именно его и убераем все пробелы
                if (number > 45) {
                    System.out.println("Close program!");
                    System.exit(0);
                }
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}
Evdar вне форума Ответить с цитированием
Старый 04.09.2017, 22:09   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

sleep тут не нужен, я говорил про основной цикл вида
Код:
while (true) {
    if (!isSafeGpuTemp()) {
        restartApp();
    }
    sleep(...);
}
а не про само чтение файла.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.09.2017, 23:24   #10
Evdar
Пользователь
 
Регистрация: 07.12.2015
Сообщений: 19
По умолчанию

А, ну да, конечно, спасибо за подсказку)
Evdar вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для мониторинга цен с сайта Илья Бочаров Помощь студентам 3 05.06.2014 17:25
Программа для мониторинга bitinstant.com по API ? iks77777 Win Api 0 24.05.2013 18:37
Нужна программа для GPS мониторинга Менеджер2 Фриланс 1 17.05.2010 22:58
Программа мониторинга Ivn Win Api 3 05.02.2009 21:24
Программа для удаленного мониторинга оборудования ALeonP Работа с сетью в Delphi 1 09.12.2007 15:26