Pagina 3 di 5 primaprima 1 2 3 4 5 ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 45
  1. #21
    Guarda, se in generale riesco a far funzionare questo programma (che sul mio PC funziona perfettamente ) credo che il tutto sia superfluo; in caso contrario credo che convenga scrivere tutto in C++, che io continuo a sostenere che sia il miglior linguaggio che si possa pensare. Il problema della logica del tuo programma però è che il PC dovrebbe essere costantemente connesso ad internet, situazione inverosimile per molti PC domestici.
    Amaro C++, il gusto pieno dell'undefined behavior.

  2. #22
    in caso contrario credo che convenga scrivere tutto in C++, che io continuo a sostenere che sia il miglior linguaggio che si possa pensare.
    Troppo poco produttivo pure quello, per quanto mi riguarda (sempre IMHO).
    Solito problema: il problema è semplice ma il codice no: lungo e complesso.

    Il problema della logica del tuo programma però è che il PC dovrebbe essere costantemente connesso ad internet, situazione inverosimile per molti PC domestici.
    Eh gia... aspetto non trascurabile, in effetti.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #23
    Originariamente inviato da billiejoex
    Troppo poco produttivo pure quello, per quanto mi riguarda (sempre IMHO).
    Solito problema: il problema è semplice ma il codice no: lungo e complesso.
    Prova a scrivere in qualunque altro linguaggio un programma che fa un uso intensivo e massiccio di API o (esatto opposto) deve essere portabile, che deve essere veloce ed efficiente, che tuttavia non manchi di strutture complesse come le classi e soprattutto i template ( ) e poi ne riparliamo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #24
    I linguaggi compilati non brillano per portabilità, se permetti.
    Per il resto nulla da dire al C++. La mia critica era solo rivolta all'eccessiva verbosità/complessità del codice. Se guardi la successiva evoluzione del C++, il D, noterai come la sintassi sia decisamente più chiara e simile a linguaggi più recenti e interpretati come Ruby o Python tanto che anche chi non conosce il linguaggio riesce ad intuire quello che succede.
    Vista la direzione verso cui pare orientato D penso che evidentemente io non sia il solo a pensare che la sintassi di C e C++ sia eccessivamente complessa e la produttività nello scrivere codice decisamente scarsa.
    Questo cmq è anche abbastanza giustificabile dato che gli anni sui gropponi di C e C++ sono ormai parecchi.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  5. #25
    Come portabilità in questo caso intendo dire "ricompili il programma su un'altra piattaforma e quello funziona", e nel C++, se usi la libreria standard, questa condizione è quasi sempre verificata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #26
    Ok, dovrei aver risolto tutti i bug... anche se è stata una faticaccia (Windows 9x supporta un misero subset delle funzionalità di Windows 2000/XP... ho dovuto riscrivere un bel po' di codice).
    Invio via e-mail il file compilato.
    Ciao

    Di seguito il sorgente:
    codice:
    #define WINVER 0x0410
    #include <windows.h>
    #define CHECKINTERVAL 5 //Secondi ogni quanto controllare
    typedef DWORD (CALLBACK* RSP)(DWORD dwProcessId, DWORD dwType);
    bool ReadMessages(HANDLE hSlot);
    LPSTR lpszSlotName = "\\\\.\\mailslot\\stoptime_mailslot"; 
    int __stdcall WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow
    )
    {
    	if (*lpCmdLine=='\0')
    	{
        	HANDLE hSlot= CreateMailslot(lpszSlotName, 
    			0,                             // no maximum message size 
    			MAILSLOT_WAIT_FOREVER,         // no time-out for operations 
    			(LPSECURITY_ATTRIBUTES) NULL); // no security attributes 
    		if (hSlot==INVALID_HANDLE_VALUE)
    		{
    			 MessageBox(0,"Can't create mailslot. Probably another instance of StopTime is still running.","StopTime",MB_ICONERROR);
    			 return 1;
    		}
    		//Tempo prima della pausa
    		__int64 old;
    		//Tempo dopo la pausa
    		__int64 now;
    		//Tempo da assegnare
    		SYSTEMTIME st;
    		RSP ProcAddr;
    		//Nasconde l'eseguibile dalla lista dei processi di Windows 9x
    		HINSTANCE hInst=LoadLibrary("KERNEL32");
    		if (hInst != NULL)
    		{
    			ProcAddr = (RSP) GetProcAddress(hInst,"RegisterServiceProcess");
    			if (NULL!=ProcAddr)
    			{
    				(ProcAddr)(GetCurrentProcessId(),1);
    			}
    			ProcAddr=NULL; //Evitiamo di richiamare una funzione la cui dll è già stata scaricata...
    			FreeLibrary(hInst);
    		}
    		//Ciclo dipendente dalla funzione ReadMessages;
    		//se c'è un messaggio che dice di uscire restituisce false e il ciclo termina
    		while (ReadMessages(hSlot))
    		{
    			GetSystemTimeAsFileTime((FILETIME *) &old);
    			Sleep(CHECKINTERVAL*1000);
    			GetSystemTimeAsFileTime((FILETIME *) &now);
    			if ((now-old>(CHECKINTERVAL+CHECKINTERVAL*0.1)*10000000) || (now-old<(CHECKINTERVAL-CHECKINTERVAL*0.1)))
    			{
    				old+=CHECKINTERVAL*10000000;
    				FileTimeToSystemTime((FILETIME *)&old,&st);
    				SetSystemTime(&st);
    				char displaytext[]="Non facciamo i furbi...";
    				HDC screendc=GetDC(NULL);
    				SetBkMode(screendc, TRANSPARENT);
    				TextOut(screendc,10,10,displaytext,sizeof(displaytext)-1);
    				ReleaseDC(NULL,screendc);
    			}
    		}
    		CloseHandle(hSlot);
    	}
    	else if (strcmp(lpCmdLine,"-?")==0||strcmp(lpCmdLine,"/?")==0)
    	{
    		MessageBox(0,
    			"StopTime by Matteo Italia: preserves the system clock from modifications.\n\n"
    			"Syntax:\n"
    			"StopTime				Starts StopTime;\n"
    			"StopTime -?			Shows this help screen;\n"
    			"StopTime /?			Shows this help screen;\n"
    			"StopTime <parameters>		Sends <parameters> to the StopTime mailslot.\n\n"
    			"Actually only \"terminate\" parameter is supported; it makes StopTime terminate.",
    			"StopTime",MB_ICONINFORMATION);
    	}
    	else
    	{
    		BOOL fResult;
    		HANDLE hFile; 
    		DWORD cbWritten; 
    		
    		hFile = CreateFile(lpszSlotName, 
    			GENERIC_WRITE, 
    			FILE_SHARE_READ,  // required to write to a mailslot 
    			(LPSECURITY_ATTRIBUTES) NULL, 
    			OPEN_EXISTING, 
    			FILE_ATTRIBUTE_NORMAL, 
    			(HANDLE) NULL); 
    		 
    		if (hFile == INVALID_HANDLE_VALUE) 
    		{ 
    			MessageBox(0,"Can't open the mailslot. Probably StopTime is not running.","StopTime",MB_ICONERROR);
    			return 2;
    		} 
    		 
    		fResult = WriteFile(hFile, 
    			lpCmdLine, 
    			(DWORD) lstrlen(lpCmdLine) + 1,  // include terminating null 
    			&cbWritten, 
    			(LPOVERLAPPED) NULL); 
    		 
    		if (!fResult) 
    		{ 
    			MessageBox(0,"Can't write on the mailslot.","StopTime",MB_ICONERROR);
    			return 3; 
    		} 
    		 
    		fResult = CloseHandle(hFile); 
    		 
    		if (!fResult) 
    		{ 
    			MessageBox(0,"Can't close mailslot handle.","StopTime",MB_ICONERROR);
    			return 4;
    		}
    		MessageBox(0,"Message successfully sent to the mailslot.","StopTime",MB_ICONINFORMATION);
    	}
    	return 0;
    }
    
    bool ReadMessages(HANDLE hSlot)
    {
        DWORD cbMessage, cMessage, cbRead; 
        BOOL fResult; 
        LPSTR lpszBuffer; 
        DWORD cAllMessages; 
     
        cbMessage = cMessage = cbRead = 0; 
        fResult = GetMailslotInfo(hSlot, // mailslot handle 
            (LPDWORD) NULL,               // no maximum message size 
            &cbMessage,                   // size of next message 
            &cMessage,                    // number of messages 
            (LPDWORD) NULL);              // no read time-out 
     
        if (!fResult) 
        { 
            MessageBox(0,"Can't get mailslot infos.","StopTime",MB_ICONERROR);
            return false; 
        } 
     
        if (cbMessage == MAILSLOT_NO_MESSAGE) 
        { 
            return true; 
        } 
     
        cAllMessages = cMessage; 
        while (cMessage != 0)  // retrieve all messages
        { 
            // Allocate memory for the message. 
     
            lpszBuffer = (LPSTR) GlobalAlloc(GPTR, cbMessage); 
            if( NULL == lpszBuffer )
    		{
    			MessageBox(0,"Can't allocate memory to read the message from the mailbox.","StopTime",MB_ICONERROR);
                return false;
    		}
            lpszBuffer[0] = '\0'; 
     
            fResult = ReadFile(hSlot, 
                lpszBuffer, 
                cbMessage, 
                &cbRead, 
                0); 
     
            if (!fResult) 
            { 
                MessageBox(0,"Can't read the message from the mailbox.","StopTime",MB_ICONERROR);
                GlobalFree((HGLOBAL) lpszBuffer); 
                return false; 
            } 
     
            // Interpretes the message
     
            if (strcmp(strlwr(lpszBuffer),"terminate")==0)
    		{
    			MessageBox(0,"Terminate message recieved; press OK to exit StopTime.","StopTime",MB_ICONINFORMATION);
    	        GlobalFree((HGLOBAL) lpszBuffer); 
    			return false; //Esce
    		}
     
            GlobalFree((HGLOBAL) lpszBuffer); 
     
            fResult = GetMailslotInfo(hSlot, // mailslot handle 
                (LPDWORD) NULL,               // no maximum message size 
                &cbMessage,                   // size of next message 
                &cMessage,                    // number of messages 
                (LPDWORD) NULL);              // no read time-out 
     
            if (!fResult) 
            { 
    	        MessageBox(0,"Can't get mailslot infos.","StopTime",MB_ICONERROR);
                return false; 
            } 
        } 
        return true; 
    }
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #27
    Adesso però io sono curioso di vedere un codice analogo scritto in Python
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #28
    Anch'io!
    Comunque non vedo come un linguaggio di livello più alto avrebbe potuto snellire questo codice: ci sarebbero volute un milione di dichiarazioni per le API, che sarebbero rimaste linkate dinamicamente (leggi: invece di una chiamata a funzione risolta direttamente dal linker ci sarebbero state quattro chiamate - LoadLibrary, GetProcAddress, la funzione da chiamare, FreeLibrary), e siccome questo codice fa un uso piuttosto ridotto delle stringhe non ci sarebbe stata neanche la comodità di lavorare con le stringhe in maniera più comoda e intuitiva (quando lavoro con gli array di char effettivamente spesso rimpiango le stringhe .NET, ma le cose si semplificano molto usando classi tipo std::string o le varie CString di ATL).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #29
    PERFETTO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    FUNZIONA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



    GRANDE MATTEO!!!! SEI TROPPO FORTE!

    Grazie ancora

  10. #30
    Non c'è di che!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.