Übergabe an Thread
-
Hallo,
rofl
also erstens weiss ich GENAU was ich will,
ich habe es auch schon genau drei Mal beschrieben.egal, danke für eure Antworten, ich probiers einfach so lang weiter bis es irgendwann klappt.
Alles was ich jetzt will ist dass die structs auch in der anderen Funktion bekannt sind.
Global deklarieren funzt nicht:I:\Programme\PellesC\Projects\Threading\threading-2.c(20): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(20): error #2120: Redeclaration of 'ProtoClient' previously declared at I:\Programme\PellesC\Projects\Threading\threading-2.c(17): found 'int' expected 'unsigned int'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(20): error #2069: Initializer must be constant.
I:\Programme\PellesC\Projects\Threading\threading-2.c(22): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(22): error #2001: Syntax error: found '&' - expecting ')'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(22): error #2120: Redeclaration of 'memset' previously declared at I:\Programme\PellesC\Include\string.h(22): found 'int __cdecl function' expected 'void * __cdecl function(void *, int, unsigned int)'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(22): error #2001: Syntax error: found ')' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(24): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(24): error #2120: Redeclaration of 'ProtoAddress' previously declared at I:\Programme\PellesC\Projects\Threading\threading-2.c(18): found 'int' expected 'struct sockaddr_in'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(24): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(24): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(25): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(25): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(25): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(25): error #2069: Initializer must be constant.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(26): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(35): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(35): error #2120: Redeclaration of 'structname' previously declared at I:\Programme\PellesC\Projects\Threading\threading-2.c(33): found 'int' expected 'struct Sockets'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(35): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(35): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(35): error #2069: Initializer must be constant.
I:\Programme\PellesC\Projects\Threading\threading-2.c(36): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(36): error #2001: Syntax error: found '.' - expecting ';'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(36): warning #2099: Missing type specifier.
I:\Programme\PellesC\Projects\Threading\threading-2.c(36): error #2069: Initializer must be constant.
I:\Programme\PellesC\Projects\Threading\threading-2.c(64): error #2113: Left operand of . has incompatible type 'int'.
I:\Programme\PellesC\Projects\Threading\threading-2.c(64): error #2113: Left operand of . has incompatible type 'int'.
*** Error code: 1 ***
Done.
-
Versuchs mal damit:
#pragma comment( lib, "wsock32.lib" ) #include <stdio.h> #include <time.h> #include <windows.h> typedef struct _Sockets { SOCKET Client; SOCKADDR_IN Address; } Sockets; Sockets structname; DWORD WINAPI Connection(void) { SOCKET ProtoClient; SOCKADDR_IN ProtoAddress; ProtoClient = socket(AF_INET,SOCK_STREAM,0); memset(&ProtoAddress,0,sizeof(SOCKADDR_IN)); ProtoAddress.sin_family = AF_INET; ProtoAddress.sin_port = htons(12345); ProtoAddress.sin_addr.s_addr = ADDR_ANY; structname.Client = ProtoClient; structname.Address = ProtoAddress; connect(structname.Client, (SOCKADDR*)&structname.Address, sizeof(SOCKADDR)); return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hInstance_2, LPSTR CmdLine, int Show ) { DWORD id; HANDLE handle = CreateThread(0, 0, &Connection, 0, 0, &id); return 0; }Müsste funzen(nicht getestet).
-
Ich will doch NUR wissen LOL ob ich wenn ich einen Thread starte der eine Funktion abarbeitet, es reicht nur dem Thread die vars zu geben oder auch der Fubnktion die die vars braucht.
Mehr will ich ned wissen
-
ah 2 secs nach dir gepostet gg.
Vielen Dank ich probiers gleich mal
-
Hmm schade, nein funzt leider auch ned.
Mir fällt echt ned ein wie ich das lösen könnte...
-
Hab mir deinen Code nochmal genauer angeguckt:
ProtoAddress.sin_family = AF_INET; ProtoAddress.sin_port = htons(12345); ProtoAddress.sin_addr.s_addr = ADDR_ANY; ... connect(structname.Client, (SOCKADDR*)&structname.Address, sizeof(SOCKADDR));Was willst du damit eigentlich erreichen? Du füllst die struct wie für einen Server und verbindest dann mit connect wie ein Client?!
Guck dir das hier nochmal an: http://www.c-worker.ch/tuts.php
-
Hi!
Danke, is mir in der Nacht bei der Fehlersuche auch aufgefallen.
gg
-
Hi Leute!
Hmm das ist jetzt der neue Code, einziges Problem ist nur noch die Übergabe in Zeile 28 und 29.
#pragma comment( lib, "ws2_32.lib" ) #include <winsock2.h> #include <winsock.h> #include <stdio.h> #include <time.h> #include <windows.h> #include <stdio.h> struct _Sockets { SOCKET Client; SOCKADDR_IN Address; }; DWORD WINAPI Connection(struct _Sockets *structname) { SOCKET ProtoClient; SOCKET pt1; SOCKADDR_IN ProtoAddress; SOCKADDR_IN pt2; ProtoClient = socket(AF_INET,SOCK_STREAM,0); memset(&ProtoAddress,0,sizeof(SOCKADDR_IN)); ProtoAddress.sin_family = AF_INET; ProtoAddress.sin_port = htons(80); ProtoAddress.sin_addr.s_addr = inet_addr ("209.85.135.147"); structname->Client = ProtoClient; structname->Address = ProtoAddress; FILE *file; file=fopen("Test.txt","w+"); fprintf(file,"%i\n,%s\n",&structname->Client, structname->Address.sin_addr.s_addr); fclose(file); connect(structname->Client, (SOCKADDR*)&structname->Address, sizeof(SOCKADDR)); return 0; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hInstance_2, LPSTR CmdLine, int Show ) { struct _Sockets *structname; DWORD id=1; Connection(structname); // HANDLE handle = CreateThread(0,0,(LPTHREAD_START_ROUTINE)Connection,(LPVOID)&structname ,0,&id); for(int i=1;i<=40;i++) { Sleep(1000); } return 0; }
-
Ah Entschuldigung in diesem Editor scheint es Zeile 30 und 31 zu sein (Zuweisung) ,mfg
-
Bitte helft mir,
hab die ganze Nacht bis um halb acht an dem Blödsinn gesessen und weiss echt nicht weiter.
lg