Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |

04.12.2009, 15:26
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
глюк, да еще и я туплю)
старею мля) собсна код:
Код:
//////////////////////////////////////////////////////////////////////////
DWORD WINAPI ScanThread(LPVOID param)
{
int nItems;
char buff[256];
char mac[256];
DWORD tid;
HANDLE host_threads[256]; //maximum for the subnet (C class)
LVITEM itm;
PARAM_BLOCK *preq_data;
nItems = g_pDlg->m_HostList.GetItemCount();
if(nItems > 256){
MessageBox(0, "Maximum host number exceeded! (256). Check mping.txt", 0, 0);
return 0;
}
// fillup info & spawn threads
for(int i=0; i< nItems; i++){
itm.cchTextMax = sizeof(buff);
itm.pszText = buff;
itm.mask = LVIF_TEXT;
itm.iItem = i;
g_pDlg->m_HostList.GetItem(&itm);
MessageBox(0,buff,0,0);
preq_data = (PARAM_BLOCK*)malloc(sizeof(PARAM_BLOCK));
preq_data->dst = inet_addr(buff);
preq_data->src = INADDR_ANY;//inet_addr("192.168.1.16"); // need to be fixed
preq_data->data_len = sizeof(preq_data->mac_data);
preq_data->idx = i;
host_threads[i] = CreateThread(0,0,ARPThread,preq_data,0,&tid); // problem #1
}
WaitForMultipleObjects(nItems, host_threads, 1, INFINITE); // problem #2
return 0;
}
чето не могу понять. если закомментить строки с проблем #1 и #2 то мессгабокс выводит нормальное значение, а если эти строки или любая одна из них остаются в работе то мессагбокс выводит пустую строку.
__________________
 
snow white world wide
|
|
|

04.12.2009, 16:02
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме: 548128
Репутация:
104
|
|
Первой что вызвало подозрения, это передача адреса локальной переменной в функцию:
Код:
char buff[256];
...
itm.pszText = buff;
...
g_pDlg->m_HostList.GetItem(&itm);
Правда не ясно как связаны #1 #2 с этим.
|
|
|

04.12.2009, 16:06
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
вообще это мфц, но какраз нормально, тк листвью возвращает в этот буфер текст элемента с индексом i.
я не пойму и в дебаге пробовал - появилась мысль что со стеком чтото не так, но отпала
__________________
 
snow white world wide
|
|
|

04.12.2009, 16:23
|
|
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме: 1290766
Репутация:
1236
|
|
мдя, решилось определением host_threads типом static (в глобальной памяти), либо же как malloc(sizeof(HANDLE)*256)
значит со стеком чтото?!
__________________
 
snow white world wide
|
|
|

05.12.2009, 12:47
|
|
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме: 991929
Репутация:
395
|
|
Ну дык HANDLE host_threads[256]; у тебя локальная переменная при каждом вызове ScanThread ее адрес может меняться так ты ещё из потока создаешь потоки... в общем попробуй вынести host_threads вообще в глобальные переменные что бы все потоки могли её видеть. авось что и получится
а для эксперимента можешь по выводить адреса host_threads
printf("%02X\n",&host_threads);
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|