Не вижу проблемы, просто отправляющая программа тоже должна знать сколько она суммарно работает.
СПОСОБ 1: Сперва Собираем данные с сервера
Добавить в код отправляющей программы:
Наверх в шапку
CODE:char ch_time[20];
int overaltime = 0;
int timer = gettime();
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
CODE:if (gettime() - timer > 20000) // принимать/отправлять данные каждые 20 секунд
{
if (overaltime = 0) // если время ранее не было считано (только что запущена программа)
{
readbuffernet (#ch_time[0], 20, -1, -1); // считываем данные с сервера
overaltime = formatsn (format (#ch_time[0])); // пихаем их в переменную overaltime
}
strcpy (#ch_time[0], format (gettime () + overaltime)); // переводим в массив char сумму общего времени
writebuffernet (#ch_time[0], size (#ch_time[0]), -1, -1); // отправляем сумму на сервер
timer = gettime (); // обнуляем таймер работы с сервером
}
СПОСОБ 2: Берем данные из файла, предварительно сохранив их там
Добавить в код отправляющей программы:
Наверх в шапку
CODE:char ch_time[20];
int timer = gettime();
int overaltime = 0; sum = 0;
string str = "";
if (fopen ("c:\... спрятанный путь к файлу ...\worktime.txt", "r") != 0) // читаем из файла
{
freadline (str);
fclose ();
}
overaltime = formatsn (str);
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
CODE:if (gettime() - timer > 20000) // принимать/отправлять данные каждые 20 секунд
sum = gettime () + overaltime;
if (fopen ("c:\... спрятанный путь к файлу ...\worktime.txt", "w") != 0) // сохраняем в файл
{
fwrite (sum);
fclose ();
}
strcpy (#ch_time[0], format (sum)); // переводим в массив char сумму общего времени
writebuffernet (#ch_time[0], size (#ch_time[0]), -1, -1); // отправляем сумму на сервер
timer = gettime (); // обнуляем таймер работы с сервером
}
Ну короче как-то так...
Принимающий код не меняется (кроме char ch_time[20]; и второго параметра readbuffernet ессьно).
Принцип такой же как раньше, только теперь при запуске отправляющей программы она сперва считает с сервера/файла суммарное время своей работы, и в дальнейшем будет отправлять раз в 20 секунд обновленное общее время своей работы (будет суммировать текущее время работы с тем что выхватила из сервера/файла при первом запуске). Принимающая программа может быть запущена в любой момент для считывания данных с сервера в свою переменную int sendedtime. До тех пор данные с сервера, по идее, никуда не денутся.
С отправкой логов тоже можно реализовать, но это вызовет неизбежные фризы отправляющей программы, т. к. сперва логи надо будет перевести в char, а представьте какие логи будут со временем работы. Да и смысла нет, по-моему, для реализации Вашей идеи с почасовой оплатой... Но если очень хочется - принцип такой же.(Отредактировано автором: 31 Марта, 2017 - 21:12:55) |