0

これをコンパイルしようとすると、エラーが発生します。

警告: の引数 1 を渡すとpthread_create、キャストなしで整数からポインターが作成されます。

誰かが私を助けることができればお願いします..

    int Traveler(int id, int numBags)
    {
           int i;
           int err;
         err = pthread_create(id, NULL, Traveler, NULL);
         if(err!=0)
         {
                      return -1;
         }
         else
         {

         }
    }
4

1 に答える 1

4

エラーはかなり明確です。最初の引数は、整数ではなくポインターにする必要があります。

男 pthread:

   int pthread_create(pthread_t *restrict thread,
          const pthread_attr_t *restrict attr,
          void *(*start_routine)(void*), void *restrict arg);

   The  pthread_create()  function  shall  create  a  new   thread,   with
   attributes  specified  by  attr, within a process. If attr is NULL, the
   default attributes shall be used. If the attributes specified  by  attr
   are modified later, the thread's attributes shall not be affected. Upon
   successful completion, pthread_create() shall store the ID of the  cre-
   ated thread in the location referenced by thread.

idpthread_create 呼び出しの前にアンパサンドを付ける前に、最後の文を読み直してください。idEDIT2: pthread_t としても定義する必要があります。

編集:

実際には、同じ行に他にも 2 つの問題があります: start_routine は 2 つではなく 1 つの引数を取る関数である必要がありますが、呼び出し元と同じ関数を渡すため、最悪の場合、これはフォーク爆弾になります!

于 2012-04-24T16:05:40.147 に答える