#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
Босс, который не может оценить ценность разработчика, глядя на их результаты, должен серьезно подумать о поиске новых проблем.