Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > CreateThread


Автор: maksar 17.3.2006, 18:32
Как в поток передать параметр типа int.

Автор: _hunter 17.3.2006, 18:41
передай его четвертым параметром...

Автор: maksar 18.3.2006, 04:35
Вот меня именно это и интересует, как приобразовывать войд * к инт.

Автор: alkorax 18.3.2006, 04:52
Приписать & ?
Код

int a = 1;
CreateThread(... , &a, ... )

Автор: maksar 18.3.2006, 05:55
((, ну я не про это((
Код

void shell(int iPort){
    hShell  = CreateThread(NULL, 0, &thread, &iPort, 0, &id1);
}

DWORD WINAPI thread(LPVOID param){
int iPort = (int)param;//не работает
int iPort = (int)&param;//не работает
int iPort1 = param;    //не работает

Как внутри thread получить число?

Автор: alkorax 18.3.2006, 06:04
param - указатель, iPortl - int. Попробуй так:
Код

int iPortl = (int)(*param);

Автор: maksar 18.3.2006, 09:56
пишет
error C2100: illegal indirection

Автор: adonin 18.3.2006, 11:10
Просто нельзя разадресовать пустой указатель: компилятор не знает на какой тип данных он указывает.
Делайте так:
Код

 int iPortl = *((int *)param); 



Автор: maksar 18.3.2006, 11:42
Компилится , но корректно не работает.
в функцию shell передается число 3434
в thread
int iPortl = *((int *)param);
iPort равно 2090069332, ни как не 3434.

Автор: adonin 18.3.2006, 12:02
В функции shell(int iPort) iPort - параметр функции. Компилятор выделяет под неё место в стеке. После выхода из функции стек освобождается и может быть затёрт (а может и не быть - не определённое поведение) другими функциями. Вы передаёте указатель на область стека и не можете гарантировать сохранность данных в этой области памяти т.к. Shell завершается сразу после CreateThread.

Передавать нужно значение, а не адрес переменной:
Код

void shell(int iPort){
DWORD Temp=iPort;                       // здесь
hShell  = CreateThread(NULL, 0, &thread, (PVOID)Temp, 0, &id1);  // здесь
}

DWORD WINAPI thread(LPVOID param){
DWORD iPortl = (DWORD) param;              // здесь



Так должно работать.

Автор: maksar 18.3.2006, 15:46
Всем спасибо, работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)