mikrocontroller.net

Forum: PC-Programmierung C/C++ 2 parallel laufende Prozess


Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hoffe, dass jermend mir sagen kann wie ich 2 paralle laufende 
Prozesse in einem C Programm schreiben kann.

Ich will die Information von 2 unterschiedlichen Client gleichzeitig 
bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem 
Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.

Danke für euere Hilfe.

Grüße,
Buns

Autor: t.b.d. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
such mal nach posix thread ;)

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte auch nützlich sein, bei einer solchen Frage das verwendete 
Betriebssystem zu enthüllen.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also genau für den zweck gibt es doch thread - einfach mal bei 
createthread in der man/hilfe suchen.

Aber es geht auch ohne thread, hängt von der art der Anwendung ab. 
Thread erzeugen einen gewissen overhead.

Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Könnte auch nützlich sein, bei einer solchen Frage das verwendete
> Betriebssystem zu enthüllen.

Ich benutze da Linux(Debian)

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
t.b.d. wrote:
> such mal nach posix thread ;)

Alle Fäden in der Hand
Thread Programmierung unter Linux in C und C++ (Teil 1)
von Wolfgang Schreiner

http://www.risc.uni-linz.ac.at/people/schreine/pap...

Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe folgenden Code geschriben. Beim Kompile bekomme ich diese 
Meldung

"undefined reference to pthread_create"


#include ...
#include "encoding.h"
socklen_t len3;
struct sockaddr_in addr_i3;
socket_t rawsock;
int main(){
  /**
   *create a socket
   *
   *transport protokol: IP Protokol
   */
  rawsock = create_socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
  printf("create successful a Raw Socket - IP Protokol\n");
  
  /**
   *set a socket option 
   */
  setsockoption(rawsock, IPPROTO_IP, IP_HDRINCL);
   
  /*
   *connect 
   */
  addr_i3.sin_family = AF_INET;
  addr_i3.sin_addr.s_addr = inet_addr(IP_I3);
  len3 = sizeof(addr_i3);
  
  printf("waiting for data\n"); 
  
  /**
   *create und start thread
   */
  pthread_create(&thread_en, NULL, (void*)encoding, &rawsock);
  
  close_socket(rawsock);
  
  return 0;
}
/*************************************************/
hier ist file encoding.h
void encoding(socket_t *sock);
encoding.c
#include "encoding.h"

void encoding(socket_t *sock){
char buf[1024]
recvfrom(*sock, &buf, 1024, (struct sockaddr*)&addr_i3, &len3);

}
und meine makefile

CC  = /usr/bin/gcc
CFLAGS  = -Wall -g

OBJ = main.o socket.o encoding.o

main: $(OBJ)
  $(CC)  $(CFLAGS) -o main $(OBJ)

%.o: %.c
  $(CC)  $(CFLAGS) -c $<

Ich kann gerade nicht sehe wo der Fehler ist. Ich bin sehr dankbar für 
jeden Hinweis.

Gruß
Buns

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probiers mit
#include <pthread.h>

EDIT: Ach quatsch, das hast du ja sicher schon. du musst natürlich die 
LIB noch hinzulinken, in der die pthread Funktionen liegen.

Siehe hier:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-39508.html
-lpthread
 zum linken dazugeben.

Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. wrote:
> probiers mit
>
> #include <pthread.h>
> 
>
Jap das habe ich schon :)

Buns

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Buns Tsuko wrote:
> Ich will die Information von 2 unterschiedlichen Client gleichzeitig
> bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem
> Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.

Dazu brauchst du nicht unbedingt zwei Prozesse/Threads. Du kannst auch 
non-blocking sockets verwenden und diese mit select() oder poll() reihum 
abfragen. Das erspart es dir dich um Synchronisierung von Threads 
kümmern zu müssen.

Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simon K. wrote:
> probiers mit
>
> #include <pthread.h>
> 
>
> EDIT: Ach quatsch, das hast du ja sicher schon. du musst natürlich die
> LIB noch hinzulinken, in der die pthread Funktionen liegen.
>
> Siehe hier:
> http://www.c-plusplus.de/forum/viewtopic-var-t-is-39508.html
>
>
-lpthread
 zum linken dazugeben.

Danke für den Hinweis. Ich muss beim Makefile nocht linken :)

Gruß,
Buns

Autor: Buns Tsuko (buns)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Schwarz wrote:
> Buns Tsuko wrote:
>> Ich will die Information von 2 unterschiedlichen Client gleichzeitig
>> bekommen und arbeiten. Von daher habe ich gedacht dass ich diesem
>> Problem mit 2 paralle laufende Prozesse in einem C Programm lösen kann.
>
> Dazu brauchst du nicht unbedingt zwei Prozesse/Threads. Du kannst auch
> non-blocking sockets verwenden und diese mit select() oder poll() reihum
> abfragen. Das erspart es dir dich um Synchronisierung von Threads
> kümmern zu müssen.

Ja. Aber ich kann das nicht benutzen wenn ich die Information von A nach 
B und gleichzeitig von B nach A übertrage muss. Oder?

Gruß,
Buns

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Doch, du kannst damit prinzipiell alles machen was du auch mit Threads 
machen kannst (vorausgesetzt du hast keine langen Berechnungen die 
preemtiv unterbrochen werden müssen). Du liest/schreibst nur die Daten 
im Buffer, das Betriebssystem kümmert sich um die eigentliche 
Übertragung und sagt Bescheid wenn Daten angekommen sind bzw. wieder 
Platz im Buffer ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.