как правильно завершить мою программу регистрации мыши

#c #for-loop #winapi #mouseevent

#c #для цикла #winapi #mouseevent

Вопрос:

мой босс дал мне эту программу для мониторинга «производительности» моих коллег: в основном я должен регистрировать использование мыши / курсора (время, когда они его не используют и т. Д.).) Из них. итак, вот код:

 
#include <windows.h>
int main(){
(.......)
ofstream myfile;
myfile.open(nomefile.c_str(),ios::app);

int count;
POINT curPos; 

for(;;)  *//start infinite cycle*
    {
            
        GetCursorPos(amp;curPos);          //legge la posizione del cursore
        float posX = curPos.x;          //restituisce la x del cursore
        Sleep(1000);                   //aspetta 1sec
        GetCursorPos(amp;curPos);          //legge la seconda posizione del cursore
        float curX = curPos.x;          //restituisce la seconda x del cursore 
        //controlla se il cursore è fermo
        if(posX == curX)
        {           
            count = count   1;          //inizia a contare
        }
        else
        {
            if(count>30)
            {
                myfile << "nsec: " << count;
           ////formatting sec/count in a readable form like hh:mm:ss///
                hour = count/3600;
                count = count%3600;
                min = count /60;
                count = count%60;
                sec = count;
                myfile << "time: " << time << "hh-mm-ss: " << hour << ":" << min << ":" << sec ;            
            }
        myfile << "_";
        count = 0;   
        myfile.flush();               //azzera contatore
        }
    
    }
myfile.close();
}

  

Чтобы обобщить код:

  • #включить win32api
  • главная (
  • бесконечный цикл для проверки каждой секунды / подсчета положения курсора
  • если (количество> 30) —> вывести прошедшее время (но я помещаю его в оператор else, потому что я хочу, чтобы он печатал только последнее «количество»)
  • остальное (сброс количества и запись в файл)
  • цикл перезапуска

итак, наконец, вот мой вопрос: как я могу закрыть программу / терминал и записать в файл последнее значение?? (если я убью / закрою терминал, пока курсор не перемещается, он не записывает последнее действие, потому что я помещаю команду print / flush в раздел else (поэтому, чтобы записать ее, я должен переместить курсор, чтобы сбросить счетчик и распечатать его)).

извините, ребята, я надеюсь, вы понимаете мой вопрос (английский не мой родной язык)

Комментарии:

1. «мой босс дал мне эту программу для мониторинга «производительности» моих коллег» Это шутка, верно? Это действительно просто упражнение для обучения?

2. Вам нужно иметь условие остановки в вашем «бесконечном» цикле (например std::atomic_bool stop = false; ), и это условие должно быть изменено каким-либо внешним событием. В Linux вы можете использовать std::signal , но не уверен, работает ли он в Windows. Если нет, вы можете отправить сообщение в свое приложение либо с помощью стандартного ввода (который может быть асинхронным, чтобы не блокировать ваш основной цикл), либо с помощью какого-либо сложного IPC.

3. После завершения этой программы вашей следующей программой будет та, которая случайным образом перемещает мышь каждые несколько секунд. Вы можете начать с копирования этой программы, и если она не обнаруживает активности мыши в течение некоторого случайного интервала между 15-60 секундами, переместите мышь в случайные позиции на экране на случайный интервал времени, 1-7 секунд. Выберите случайную координату на экране, затем в течение следующих 1-7 секунд перемещайте мышь на случайно выбранный пиксель в случайно выбранную точку в пределах 0-70 пикселей от случайной координаты. Затем в 10% случаев выбирайте более длительный период между действиями мыши.

4. Это было бы убийственно для немногих выживших пользователей Word Perfect, где вы можете работать несколько дней, не прикасаясь к мыши.

5. 1 Продуктивные разработчики не используют мышь, если это абсолютно, положительно неизбежно. 2 Программа классифицирует пользователей, которые могут перемещать мышь по идеально вертикальной линии, как ленивых бездельников. 3 Есть SetCursorPos , что делает ваш подход бесполезным. 4 Босс, который не может оценить ценность разработчика, глядя на их результаты, должен серьезно подумать о поиске новых проблем.