RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Вопрос по Си (нитки)


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Igor Saveliev
To : All
Subj : Вопрос по Си (нитки)

Господа, просветите пожалуйста.
Есть такой кусок кода(см. ниже). Цель: запустить две нитки с передачей им двух разных параметров. Ожидаемый результат на экране:
Param=1234
Param=5678
Так и получается, если в main() оставить DosSleep(). Если этот вызов убрать, то на экране:
Param=5678
Param=5678

Просветите, где грабли.
Вырезка из программы:

void main()
{
ULONG ParamList[5];
PULONG Params;
TID* ServThreadID;
...
*(Params + 0)= 1234;
*(Params + 1)= 5678;

for (int i=0; i< 2; i++)
{
ParamList[0] = *(Params + i);
rc = DosCreateThread((ServThreadID+i),
ServThreadFunc,
(ULONG)ParamList,
0L,
8192L);
assert(NO_ERROR==rc);
DosSleep(1000);
}/*end of for (int i=0; i< 2; i++)*/
...
}
---------------------

VOID APIENTRY ServThreadFunc(ULONG ParamL)
{
ULONG ulTemp;
...
ulTemp = *((PULONG)ParamL + 0);
printf("Param= %lx\n", ulTemp);
fflush(stdout);
...
}


Mon 03 Dec 2001 18:39 Mozilla/4.61 [ru] (OS/2; I)




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.