zyp Skrevet 11. oktober 2003 Del Skrevet 11. oktober 2003 Nå er det slik at jeg driver å programmerer diverse ting som vil kjøre i forskjellige prosesser, og som vil sende data til hverandre... Det jeg har lyst å gjøre er å lage et objekt som et program kan benytte seg av, og ved å bruke det vil det kunne kommunisere med alle andre programmer som også bruker objektet... Problemet mitt er at jeg vet ikke helt hvordan jeg skal kommunisere mellom prosessene, en ting å merke seg er at det er windows jeg tenker på nå, linux skulle vel funke med fifo... Kan avsløre litt av planene jeg har... Jeg skal lage en lcd styring som forker i to ekstra prosesser, en til å håndtere output på displayet, og en til å scanne etter input... Dessuten skal lcd styringa kunne kommunisere med softbus styringa slik at jeg kan se status på lcd og sette fart med knappene... Mulig jeg kan ha en prosess som funker som hub/switch for kommunikajon slik at alle objektene kobler seg opp mot den, og den sender data frem og tilbake, men dette får jeg tenke på senere... Lenke til kommentar
daysleper Skrevet 13. oktober 2003 Del Skrevet 13. oktober 2003 Jeg kan ikke fordra Windows og har ikke råd til å betale for en compiler - så jeg kan istedet vise deg et eksempel der jeg bruker posix-threads som er mer Linux'ish. Bruker her MinGW som compiler under Windows, og har MingGW installert i C:MinGW -katalogen. MinGW finner du her: http://www.mingw.org/ (er en del forskjellige pakker å velge i når man skal laste ned, jeg lastet ned pakken med navnet "MinGW") Siden pthreads-biblioteket ikke følger med MinGW compileren må du laste ned dette selv. Du trenger Biblioteket: ftp://sources.redhat.com/pub/pthreads-win...libpthreadGCE.a ..som du legger i C:MinGWlib og renamer til libpthread.a .. og headerfilene: ftp://sources.redhat.com/pub/pthreads-win...clude/pthread.h ftp://sources.redhat.com/pub/pthreads-win...include/sched.h ftp://sources.redhat.com/pub/pthreads-win...ude/semaphore.h ..som du legger i C:MinGWinclude Eksempelkode #include <iostream> #include <sstream> #include <pthread.h> #include <unistd.h> using namespace std; // Dette for at visse ting skal være likt mellom Linux og Win32(MinGW) #ifdef _WIN32 #define strupr _strupr #define strncasecmp _strnicmp #ifdef __GNUC__ #define sleep(t) _sleep(t*1000) #define kbhit _kbhit #endif #endif stringstream buffer; // denne kan brukes til å kommunisere mellom prosessene hare() og rev() pthread_mutex_t mutex; void *hare(void* param) { int* i = static_cast<int*>(param); *i++; for(;;){ cerr << "Hare" << endl; pthread_mutex_lock(&mutex); buffer << "Hare "; pthread_mutex_unlock(&mutex); sleep(2); } } void *rev(void* param) { int* i = static_cast<int*>(param); *i++; for(;;){ cerr << "tRev" << endl; pthread_mutex_lock(&mutex); buffer << "Rev "; pthread_mutex_unlock(&mutex); sleep(4); } } int main(int argc, char** argv) { pthread_t hareThread; pthread_t revThread; pthread_mutex_init(&mutex, 0); cerr << "buffer før kjøring: "" << buffer.str() << """ << endl; cerr << "--" << endl; pthread_create(&hareThread, 0, hare, 0); pthread_create(&revThread, 0, rev, 0); sleep(10); pthread_mutex_lock(&mutex); cerr << "--" << endl; cerr << "buffer etter kjøring: "" << buffer.str() << """ << endl; return(0); } ..lagre filen som main.cpp og kompiler den slik: Kompilering Regner med at du vet hvordan man får frem en kommandolinje i Windows og at du kan bruke den? g++ -g -Wall main.cpp -o main -lpthread ..det er viktig at -lpthread kommer bakerst! Hvis du i stedet velger å bruke Linux , er compileringen helt lik. Kjøring Når jeg kjører programmet får jeg denne utskriften: buffer før kjøring: ""-- Hare Rev Hare Rev Hare Hare Rev Hare -- buffer etter kjøring: "Hare Rev Hare Rev Hare Hare Rev Hare " Kort forklaring av mutex Mutex er et begrep som gjelder thread-programmering generellt. pthread_mutex_lock saken gjør at funksjonene hare() og rev() ikke skriver til buffer samtidig - noe som kunne gitt resultater som: buffer etter kjøring: "HaRerve HaRreve HarReev RevH are HareRe HvHare " Her er en oversikt over IPC-teknologier spesiellt for Windows: http://msdn.microsoft.com/library/default....munications.asp Lenke til kommentar
zyp Skrevet 14. oktober 2003 Forfatter Del Skrevet 14. oktober 2003 Dette forstod jeg tror jeg... Bruker både windows og linux selv da, men som jeg skrev i første posten skal jeg skrive noe som funker på begge systemer... Men pthreads, funker det nå slik at to underprosesser startes av pthreads_create() og de har hare() og rev() som hovedfunksjon? I såfall forstår jeg Selvfølgelig kan jeg bruke kommandolinje i både linux og win, og når jeg compiler noe bruker jeg make Har både minGW og Borland C++, og har i det siste brukt sistnevnte... Skal undersøke litt mer om dette selv og se hva jeg får til... Lenke til kommentar
A_N_K Skrevet 14. oktober 2003 Del Skrevet 14. oktober 2003 Ser ut som du like gjerne kan bruke tråder som prosesser, tråder deler minne, så du slipper problemene med interprosess-kommunikasjon (som kan bli ganske hårete i Windows så vidt jeg forstår). Du kan f.eks bruke boost::thread som en kryssplattform abstraksjon for oppretting av tråder etc. Lenke til kommentar
daysleper Skrevet 14. oktober 2003 Del Skrevet 14. oktober 2003 Ja - IPC i Windows ved hjelp av Pipes krever at du bruker en egen compiler f.eks. .. ikke noe særlig synes jeg i hvertfall .. ..og du fortstod riktig ja, zyp Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå