oder andere frage zu threads



  • Habe ich ne möglich kein unter windows, einen thread zu erzeugen von einer function mit meheren parametern und einem rückgabewert??
    weil soweit ich createthread bisher gecheckt habe kann ich ja nur functionen verwenden die keinen rückgabewert haben und 1 einegabewert oder ???

    danke



  • verpacke deine Übergabeparameter doch einfach in einen struct und übergebe dann einen Pointer auf eine Instanz dieses Structs. So kannst du beliebig viele Ein- und Ausgabeparameter in den Thread bekommen. So mache ich das zumindest.

    gruß



  • kannst du mir bitte sagen warum mein thread bei diesem beispiel nicht aufgeruffen wird??? alles ist ok beim compilieren, auch der thread wird erzeugt (handle !=0)
    aber mit dem debuger stelle ich immer fest das meine function nicht aufgerufen wird..

    hier der code:

    #include <stdio.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    typedef struct Struct
    {
    int datalen;
    char *data;
    int begin;
    char *wort;
    int position;
    }tStruct;
    
    int a=0;
    
    //DWORD WINAPI check_data(tStruct *x)
    DWORD WINAPI check_data(void *b)
    {
      tStruct *x=(tStruct*)b;
    
      a=0;
       int i=x->begin;
    
       for(;i != x->datalen;i++)
       {
            printf("test\n");    
    
           if(x->data[i]==x->wort[a])
           {
               a++;
               if(a==strlen(x->wort))
                {
                 x->position=i-strlen(x->wort)+1;
                a=0;
                return 0;
                }
           }
           else
           {
    
               a=0;
    
           }
    
       }
       x->position= -1;
       return 0;
    }
    
    int main()
    {
    char c[]="das hier ist ein User testlanger";
    
    DWORD id;
    HANDLE hThread;
     char szMsg[80];
    
    tStruct *a=(tStruct *) malloc(sizeof(tStruct));
    
    a->begin=0;
    a->data=c;
    a->datalen=strlen(c);
    a->position=0;
    a->wort="hier";
    
    hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)check_data,&a,CREATE_SUSPENDED,&id);
    if (hThread == NULL)
       {
          wsprintf( szMsg, "CreateThread failed." );
          MessageBox( NULL, szMsg, "main", MB_OK );
       }
       else
       {
             //_getch();
            ResumeThread(hThread);
           printf("%i\n",a->position);
          CloseHandle( hThread );
       }
    
    //check_data(a);
    
    }
    


  • hat sich erledigt

    als ich
    //_getch();
    wieder einkommentiert hatte, gings.

    danke


Anmelden zum Antworten