THREADS אומר לך משהו

שלום וברכה אני מחפשת תוכנית פשוטה אשר ממומש בה המושג THREAD אם מישהו יכול לכוון אותי לאיזו כתובת או לתת לי קובץ אני ממש יודה לו בתודה מראש

תשובה

thread זהו למעשה איזשהו תהליך שבו התוכנה או חלק ממנה רץ במקביל באותו זמן. אפשר להקביל את זה למערכת הפעלה חלונות . פעם , בדוס היית צריכה להפעיל כל תוכנה בתורה , ורק אחרי שהיא מסיימת את עבודתה , אפשר להפעיל את היישום הבא . בחלונות אפשר לעבוד עם כמה תוכנות במקביל ת בדומה לTHREADS מצטער שאין לי קובץ שיבהיר את זה יותר..

הנה קטע קוד

#include"SERVER.h" // ----------THIS IS THE SERVER'S PART---------------- // ------------TCP SERVER - BY ELI SHLUSH------------- /*int y=0; SOCKET ClientSocket[5];*/ void main() { // ---Initializing Variables---- SOCKET MainSocket,ClientSocket; hostent *host; sockaddr_in ServerAddress={0}; char hostname[50]; char buffer[100]; int bytes=0; int ErrorCheck; // ComInfo *info; memset(buffer,0,sizeof(buffer)); CheckForDll(); MainSocket=socket(AF_INET,SOCK_STREAM,0); if(MainSocket==INVALID_SOCKET) CheckError(); //memset(&ServerAddress,0,sizeof(sockaddr_in)); ServerAddress.sin_family=AF_INET; ServerAddress.sin_port=htons(5000); gethostname(hostname,sizeof(hostname)); host=gethostbyname(hostname); ServerAddress.sin_addr=*((in_addr*)host->h_addr); ErrorCheck=bind(MainSocket,(sockaddr*)&ServerAddress,sizeof(sockaddr)); if(ErrorCheck==SOCKET_ERROR) CheckError(); ErrorCheck=listen(MainSocket,4); if(ErrorCheck==SOCKET_ERROR) CheckError(); printf("\nserver is waitining for connect\n"); int y=0; while(y<10) { printf("y=%d\n",y); ClientSocket=accept(MainSocket,NULL,NULL); if(ClientSocket==INVALID_SOCKET) { printf("\nerror\n"); CheckError(); } printf("\after %d accept \n",y+1); _beginthread(ClientHandle,0,(void *)&ClientSocket); if(y==4) for(int t=0;t<1000000000;t++); y++; } closesocket(MainSocket); WSACleanup(); } void ClientHandle(void *soc) { int x=0; int ErrorCheck=0; SOCKET *sock=(SOCKET*)soc; char buf[100]; while(x<4) { memset(buf,0,sizeof(buf)); ErrorCheck=recv(*sock,buf,sizeof(buf),0); if(ErrorCheck==SOCKET_ERROR) CheckError(); printf("\nSERVER HAS RECIEVED %d BYTES, CONTAINING: %s\n",ErrorCheck,(char *)buf); puts(buf); proccess(buf); ErrorCheck=send(*sock,buf,sizeof(buf),0); if(ErrorCheck==SOCKET_ERROR) CheckError(); printf("\nSERVER HAS SENT %d BYTES, CONTAINING: %d\n",ErrorCheck,((Msg*)buf)->one); x++; } closesocket(*sock); _endthread(); } void CheckForDll() { WORD vr; WSADATA data; vr=MAKEWORD(1,1); if(WSAStartup(vr,&data)) { printf("\nERROR: UNABLE TO FIND A USEABLE WINSOCK DLL ....EXITING\n"); WSACleanup(); exit(1); } if(LOBYTE(data.wVersion)!=1 || HIBYTE(data.wVersion)!=1) { printf("\nERROR: YOUR WINSOCK DLL DOES NOT SUPPORT VERSION 1.1 ....EXITING\n"); WSACleanup(); exit(1); } } void CheckError() { int err=WSAGetLastError(); switch(err) { case WSANOTINITIALISED: printf("ERROR: WSANOTINITIALISED\n"); break; case WSAENETDOWN: printf("ERROR: WSAENETDOWN\n"); break; case WSAEADDRINUSE: printf("ERROR: WSAEADDRINUSE\n"); break; case WSAEADDRNOTAVAIL: printf("ERROR: WSAEADDRNOTAVAIL\n"); break; case WSAEFAULT: printf("ERROR: WSAEFAULT\n"); break; case WSAEINPROGRESS: printf("ERROR: WSAEINPROGRESS\n"); break; case WSAEINVAL: printf("ERROR: WSAEINVAL\n"); break; case WSAENOBUFS: printf("ERROR: WSAENOBUFS\n"); break; case WSAENOTSOCK: printf("ERROR: WSAENOTSOCK\n"); break; case WSAEINTR: printf("ERROR: WSAEINTR\n"); break; case WSAEISCONN: printf("ERROR: WSAFISCONN\n"); break; case WSAENETRESET: printf("ERROR: WSAENETRESET\n"); break; case WSAEOPNOTSUPP: printf("ERROR: WSAEOPNOTSUPP\n"); break; case WSAESHUTDOWN: printf("ERROR: WSAESHUTDOWN\n"); break; case WSAEWOULDBLOCK: printf("ERROR: WSAWOULDBLOCK\n"); break; case WSAEMSGSIZE: printf("ERROR: WSAEMSGSIZE\n"); break; case WSAETIMEDOUT: printf("ERROR: WSAETIMEDOUT\n"); break; case WSAECONNRESET: printf("ERROR: WSAECONNRESET\n"); break; case WSAEACCES: printf("ERROR: WSAEACCES\n"); break; case WSAENOTCONN: printf("ERROR: WSAENOTCONN\n"); break; case WSAEHOSTUNREACH: printf("ERROR: WSAEHOSTUNREACH\n"); break; case WSAECONNABORTED: printf("ERROR: WSAECONNABORTED\n"); break; case WSAEAFNOSUPPORT: printf("ERROR: WSAEAFNOSUPPORT\n"); break; case WSAEDESTADDRREQ: printf("ERROR: WSAEDESTADDRREQ\n"); break; case WSAENETUNREACH: printf("ERROR: WSAENETUNREACH\n"); break; } WSACleanup(); exit(1); } void proccess(char *buffer) { Msg *msg=(Msg*)buffer; int result=0; switch(msg->action) { case '+': result=(msg->one)+(msg->two); break; case '*': result=(msg->one)*(msg->two); break; case '-': result=(msg->one)-(msg->two); break; case '/': result=(msg->one)/(msg->two); break; } memset(buffer,0,sizeof(buffer)); msg->one=result; }

רק שימי לב ש threads הם שונים לחלוטין בכל מערכת הפעלה

ולכן הדוגמא שקיבלת, תעבוד במערכת ההפעלה (השבירה, אך הפופולרית) של מר גייטס.
עבור לעמוד
בחזרה לפורום
כרגע בפורום זה: אין משתמשים רשומים
עבור לפורום:
תיכנות
בחר
בחר