Member 12330615 Ответов: 1

Как передать параметр каждому потоку?


В моем коде VC++

CWinThread* Serial_Thread[3];

_tmain(int argc, char* argv[])
{

for (int i = 0 ; i < 3; i++)
{
Serial_Thread[i] = AfxBeginThread(SendSerial_Thread, & i);
}
}
и
статический UINT SendSerial_Thread(LPVOID pParam)
{
int x = (int)pParam;
}

Но при отладке,
последний х-нить не равны, я из основной программы;
(если i=0, то x=4060628....)

Я думал, что это просто.
Но теперь я не знаю, почему и где моя вина....
Пожалуйста, дайте мне знать

Спасибо заранее.

Что я уже пробовал:

Еще 2 часа потрачены впустую на эту проблему...

1 Ответов

Рейтинг:
8

Richard MacCutchan

pParam это указатель чтобы int не был int. Должно быть

static UINT SendSerial_Thread(LPVOID pParam)
{
    int x = *reinterpret_cast<PINT>(pParam);
}


Member 12330615

После модификации в соответствии с вашими советами и тщательного тестирования я обнаружил, что тестирование почти применимо. Но иногда Икс совершал ту же ошибку....

Richard MacCutchan

Переменная x существует только внутри for петля. Таким образом, как только этот цикл заканчивается, нет никакой гарантии, что он будет содержать ожидаемое значение. На самом деле, как только этот цикл заканчивается, основной поток также может закончиться, так как он не ждет завершения ни одного из дочерних потоков. Вы должны использовать переменную (и основной поток), которая будет существовать в течение всего срока службы всех потоков, которые могут ссылаться на нее.