kategoria: ANSI C
[#1] [C] Prosty Cron
Hej,
probowałem napisać na szybko prosty Cron, ktory by uruchamiał
jakaś komende co jakis czas wg danych umieszczonych w argumentach startowych.

Ale poniższy sposób nie moze być, bo zamula system:

#include <proto/exec.h>
#include <proto/dos.h>

#include <proto/intuition.h>
#include <intuition/intuition.h>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct Screen*      APP_pubscreen   = NULL;       
struct Window*      APP_window      = NULL;
LONG APP_signals;

int main(int argc, char **argv)
{
	if (argc <= 1)
	{
		printf("To use msSimpleCron you must give two parameters:\n");
		printf("- first: the command to execute ex. 'execute sys:tools/my.scrip't or 'sys:tools/calculator' etc.\n");
		printf("- second: is the time of delay in miliseconds, ex. 5000 for 5 seconds etc.\n");
		printf("for example: msSimpleCron 'execute my.script' 10000  <-- will run my.scipt every 10 seconds.");
		return 0;
	}

    LONG curr_time = clock();
    LONG start_time = curr_time;
	LONG elapsed_time = 0;
	LONG time_total = 0;
	LONG delay = argv[2];


	if (!(APP_pubscreen = LockPubScreen(NULL))) 
		return 20;

    // --- create window ---
    APP_window = OpenWindowTags(	NULL, 
	 								WA_Left, 0,
									WA_Top, 0, 
									WA_Width, 0, 
									WA_Height, 0, 
									WA_Flags, WFLG_ACTIVATE, 
									WA_PubScreen, (ULONG)APP_pubscreen,
									TAG_END);

	if (!APP_window)
		return 20;

    // enter main loop
	BOOL is_loop = TRUE;

	while(is_loop)
	{
		curr_time = clock();
		time_total = (curr_time - start_time);

		if (time_total - elapsed_time >= delay)
		{
				elapsed_time = clock();
				system(argv[1]);
		}

		if(SetSignal(0L, APP_signals) & APP_signals)
		{
			struct IntuiMessage	*imsg;

			while( imsg=(struct IntuiMessage *)GetMsg(APP_window->UserPort) )
			{
				ReplyMsg((struct Message *)imsg);
			}
		}
	}
}
[#2] Re: [C] Prosty Cron

@mateusz_s, post #1

na mój chopski rozum, przede wszystkim masz w tym kodzie fundamentalnego błęda, o tutej:
LONG delay = argv[2];

siedzi, pije i chrupki
zrób se po tym printf i zobacz, co zwraca delay.
hint: https://cpp0x.pl/dokumentacja/standard-C/strtol/443

Ostatnia aktualizacja: 09.12.2021 04:50:41 przez snajper
[#3] Re: [C] Prosty Cron

@snajper, post #2

tak, babol mi tu wpadł.. wcześniej testowałem na sztywno co 5 sekund..

wiec nawet po odpaleniu jednego takiego programu ktory wykonuje cos co 5 sekund,
to system zamula,

to powinno być coś ala Commodity, tylko no właśnie jeszcze do tego nie doszedłem
i chciałem "na szybko".. innymi słowy program nasłuchujący, musi mieć przecież jakaś petlę
i sprawdzać czas
[#4] Re: [C] Prosty Cron

@mateusz_s, post #3

@pisklak zaproponował żeby użyć Delay() zamiast pobierania czasu
i faktycznie teraz nie zamula :D

dzieki @pisklak OK
[#5] Re: [C] Prosty Cron

@mateusz_s, post #4

Cała przyjemność po mojej stronie szeroki uśmiech
A system zamulały funkcje od czasu wykonywane w ciasnej pętli. Zresztą RKM coś tam ostrzega chyba że mogą zamulać o ile pamietam.
1
[#6] Re: [C] Prosty Cron

@mateusz_s, post #1

Można też zrobić to za pomoca Timer Device + Wait.
[#7] Re: [C] Prosty Cron

@asman, post #6

Hej, jeszcze jedna sprawa..

Program działa świetnie, i jestem z niego zadowolony, mam dzieki niemy na pasku
cały czas obecny stan połaczenia internetowego Online/Offline (sprawdzany co jakieś 8 sekund poprzez wykonywany skrypt z uzyciem ping)

Natomiast chciałem nieco uczłowieczyć ten program i pomyślałem, żeby go zrobić jako Commodity,
dzięki temu byłby do niego dostęp poprzez Exchange, ze mozna go wylaczyc, wlaczyc itp.
W tym momencie po prostu jest odpalany podczas startu i koniec.

Jak zaczałem czytam o Commodity to generalnie ich zasada polega na tym że owszem działają w tle ale po to by przywchwytywać pewien rodzaj "inputu" i na nazie tego robić jakąs czynność.

Pytanie czy taki program typu Cron, tez mogę upchać do Commodity. Bo jednak nie pobieram tam żadnego inputu,
od tylko ma w sobie tą jedną komendę Delay(czas).. natomiast zalezy mi tak jak wspomnialem na fajnej
dostpenosci do niego poprzez Exchange.. czy nie zamulę systemu jesli zrobie takie Commodity?
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem