Newsgroup: it.comp.programmare.win32
Titolo: Applicazioni multithreading

Mi fate un esempio in c o in delphi di un'applicazione multithreading?
Grazie in anticipo

 Grazie in anticipo
Essì, mica ti possiamo scrivere il sorgente di un multithreading apposta
per te, comunque se vuoi trovi sicuramente qualcuno disposto a spiegarti
cos'è il multithreading; se c'è qualcosa che non capisci, chiedi e ti si
risponderà.
Altrimenti, se vuoi proprio un esempio di codice, cerca con Google, no?
ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie in anticipo
Essì, mica ti possiamo scrivere il sorgente di un multithreading apposta


Pardon, ho cliccato due volte su "Invia"


Mi fate un esempio in c o in delphi di un'applicazione multithreading?
Il C/C++, di per sè, non conosce cosa siano i thread, devi lavorare
con un compilatore particolare.  In C++ Builder, ad esempio, come con
Delphi, si può ricorrere alla classe TThread, che fa da "wrapper". 
Tra gli esempi di Delphi trovi un demo che sfrutta 3 thread distinti
per fare, rispettivamente, un ordinamento Bubble Sort, Selection Sort
e Quick Sort.
Con la "pseudo" parallelità di esecuzione, ti dimostra come,
rispettivamente, un algoritmo sia più lento dell'altro.


Compilatore Borland :
#include        <windows.h>
#include        <process.h>
#include        <stdio.h>
#include        <conio.h>
/*      This function acts as the 'main' function for each new thread.
static  void    threadMain(void *arg) */
{
        printf("Thread %2d has an ID of %u\n", (int)arg,
GetCurrentThreadId());
 
        _endthread();
}
int     main(void)
{
        #define NTHREADS        25
        HANDLE  hThreads[NTHREADS];
        int     i;
 
        //      Create NTHREADS inheritable threads that are initially
        //      suspended and that will run starting at threadMain().
        //      at threadMain().
        for     (i = 0; i < NTHREADS; i++)
        {
                SECURITY_ATTRIBUTES     sa = 
                {
                        sizeof(SECURITY_ATTRIBUTES),    // structure
size
                        0,                              // No security
descriptor
                        TRUE,                           // Thread
handle is inheritable
                };
                DWORD   threadId;
                hThreads[i] = (HANDLE)_beginthreadNT(
                                        threadMain,             //
Thread starting address
                                        4096,                   //
Thread stack size
                                        (void *)i,              //
Thread start argument
                                        &sa,                    //
Thread security
                                        CREATE_SUSPENDED,       //
Create in suspended state
                                        &threadId);             //
Thread ID.
                if      (hThreads[i] == INVALID_HANDLE_VALUE)
                {
                        MessageBox(0, "Thread Creation Failed",
"Error", MB_OK);
                        return  1;
                }
                printf("Created thread %2d with an ID of %u\n", i,
threadId);
        }
        printf("\nPress a key to thaw all threads\n\n");
        getch();
 
        //      Resume the suspended threads.
        for     (i = 0; i < NTHREADS; i++)
                ResumeThread(hThreads[i]);
        //      Wait for all threads to finish execution.
        WaitForMultipleObjects(NTHREADS,        // Number of objects
to wait for
                               hThreads,        // The objects to wait
for
                               TRUE,            // Wait for all
objects
                               INFINITE);       // No timeout
        //      Close all of the thread handles.
        for     (i = 0; i < NTHREADS; i++)
                CloseHandle(hThreads[i]);
 
        return  0;
}

 con un compilatore particolare.
EEHHH ?!?


EEHHH ?!?
Già.

 Già.
Macche' gia' e gia'! :P
Scusa ma che vuol dire quando un linguaggio "conosce" o "non conosce" i
thread? Non credo che normalmente i linguaggi di programmazione offrano
supporto particolare per i thread; non dipende dal linguaggio, ma dalle
API dell'ambiente in cui mi trovo, ad esempio Windows fornisce le funzioni
CreateThread & company; in particolare, per implementare un thread in
Windows basta chiamare CreateThread passandogli i parametri desiderati e
il puntatore alla funzione che svolge il lavoro del thread, tutto questo
senza che il compilatore supporti alcunché di particolare, a parte il
fatto ovviamente che deve essere possibile passare puntatori come
parametri.


 API dell'ambiente in cui mi trovo, ad esempio Windows fornisce le funzioni
Ti sbagli.  Vari linguaggi, come ad esempio Java, Python, Ruby, e
credo anche C#, "offrono supporto particolare per i thread" o come
parte del linguaggio vero e proprio ovvero della sua libreria
standard.  Naturalmente la _implementazione_ di questo supporto
potra` (eventualmente) appoggiarsi alle "API dell'ambiente in cui
ti trovi", ma i programmi scritti in questi linguaggi non avranno
comunque bisogno di preoccuparsi di come il linguaggio implementi
le sue feature, non piu` di quanto debbano preoccuparsi di come
implementi, ad esempio la scrittura su file, o altre "primitive"
(del linguaggio e/o della sua libreria standard) che a loro volta
possono appoggiarsi sulle "API dell'ambiente".
Il C ed il C++ non offrono questo tipo di support per i thread
(mentre ad esempio lo offrono per i file), e quindi, se vuoi usare
quei linguaggi per applicazioni multi-threading, devi effettivamente 
preoccuparti delle "API dell'ambiente" (o procurarti librerie che
ti isolino da queste API permettendoti una programmazione ad un
livello semantico piu` astratto e/o comunque piu` trasportabile).
Alex

Alex Martelli ha scritto:



aaaahhh, ora ho capito :)
Non conosco Python e Ruby (anche se ho sentito spesso Python), ma ho
presente a cosa ti riferisci riguardo al Java.
ciao.


supporto particolare per i thread; 
Appunto, è il mio concetto di "conoscenza" dei thread da parte di un
linguaggio.  Hai appena confermato quanto stai contestando.