Передача данных в поток

Тема в разделе "LANGS.C", создана пользователем serega28, 26 ноя 2009.

  1. serega28

    serega28 Member

    Публикаций:
    0
    Регистрация:
    26 мар 2007
    Сообщения:
    115
    Адрес:
    Minsk
    Вот я создаю потоки:
    Код (Text):
    1. for (int i = 0; i < 6; i++)
    2. {
    3.   for (int j = 0; j < 6; j++)
    4.   {          
    5.     if (matrix[i*6+j] == 1)
    6.     {
    7.         ind.iPos = i; ind.jPos = j; ind.id = iNum; ind.pid = 0;
    8.         memcpy(ind.mtrx, matrix, 36 * sizeof(int));
    9.  
    10.         iNum++;
    11.  
    12.         EnterCriticalSection(&cs);
    13.             iCountThread++;
    14.         LeaveCriticalSection(&cs);
    15.  
    16.         // создаем поток
    17.         _beginthread(FindThread, 0, (void *) &ind);
    18.     }
    19.   }
    20. }
    А вот и сам поток:
    Код (Text):
    1. void FindThread(void *in)
    2. {
    3.     int *matrix, iPos, jPos, isPos, ijPos, iNum;
    4.  
    5.     iNum = ((INDATA*)in)->id + 1;
    6.     iPos = ((INDATA*)in)->iPos; jPos = ((INDATA*)in)->jPos;
    7.     isPos = iPos; ijPos = jPos;
    8.  
    9.     matrix = (int*)malloc(sizeof(int) * 36);
    10.     memcpy(matrix, ((INDATA*)in)->mtrx, sizeof(int) * 36);
    11.  
    12.  
    13.     printf("Thread started №%d\n", iNum);
    Почему у меня на экране создаются потоки с одним и тем же номером, это получается что передается один и тотже указатель на массив. А как сделать чтобы у каждого потока входные данные были свои?

    ..
    Thread started № 11
    Thread started № 11
    Thread started № 11
    Thread started № 11
    Thread started № 11
    ...
     
  2. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    449
    нету многих деталей, но осмелюсь спросить ключевой момент - где описана переменная ind? небось на стеке то?

    а ето чего?