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

25.08.2009, 14:05
|
|
Познающий
Регистрация: 29.01.2008
Сообщений: 82
Провел на форуме: 373690
Репутация:
88
|
|
Билдера нету под рукой... но попробуй так:
PHP код:
void BlaBlaBla( void *a)
{
int i;
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i),"tfile.ru");
i++;
}
void Get(String url, char *host)
{
BlaBlaBla
}
|
|
|

25.08.2009, 14:06
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Как уже не раз говорилось лучше почитать пару книжек а не набирать говнокод и молится что бы он работал
|
|
|

25.08.2009, 14:10
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Сообщение от razb
Как уже не раз говорилось лучше почитать пару книжек а не набирать говнокод и молится что бы он работал
Типа обиделся, что + не поставил? Не надо отсылать меня к книжкам. Обрати внимание на название темы "[c/c++] Новичкам: задаем вопросы". Была бы твоя воля, ты бы переименовал "[c/c++] Новичкам: НЕ задаем вопросы - читаем книги!".
|
|
|

25.08.2009, 14:27
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
На правах оффтопа ))
Типа обиделся, что + не поставил?
Мне вообще плевать на репу, это далеко не показатель чьих то знаний
Просто смотрю на все эти вопросы и плакать хочется, на все твои вопросы есть ответы на первых 10 страницах гугла + 100 первых стр. любого учебника по с\с++
Я рад помочь если где то что то не ясно или не понятно и ответа нигде нет, а тут смотришь большинство постов в стиле "хочу написать что то крутое, да вот не знаю чем int от char отличается" )
|
|
|

25.08.2009, 14:32
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Поверь, я бы не задавал вопросы, не нагуглив их.
|
|
|

25.08.2009, 14:45
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Get("/forum/profile.php?mode=viewprofile&u="+IntToStr(1000+i). c_str(),"tfile.ru"); // тут орет invalid pointer addition.
Ты пытаешься сложить два указателя на строки, а не их самих это не пхп, для конкатенации есть специальная ф-ция strcat() и если бы ты удосужился почитать хоть немножко любой учебник эти вопросы бы сразу отпали.
|
|
|

26.08.2009, 10:40
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Еще вопрос, есть код:
Код:
int id = 0;
void Thread( void *a)
{
Get(IntToStr(1000+id).c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
for(i=0;i<=1;i++)
_beginthread(Thread, 0, NULL);
}
//---------------------------------------------------------------------------
Вобщем я пишу парсер. Мне надо, чтобы каждый поток отдельно парсил аккаунты. id++ не поканает тут. Как реализовать это?
|
|
|

26.08.2009, 12:01
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
void Thread( void *a)
{
int mid;
mid = id++;
Get(IntToStr(1000+mid).c_str());
}
Или как вариант можеш юзать синхронизацию при изменениии. или интерлоки юзать
mid = InterlockedIncrement(&id) - 1;
т.е. id увеличится 100% на 1 и вернется его текущее значение. от которого ты отнимиш 1 чтобы получить предыдущее. Антерлок онснован на атомарном доступе. т.е. блокировка шины памяти идет и в этоге никто другой не сможет изменить значение.
В этоге такая конструкция (без учета того что это вызов апишки)представляет собой такой код:
Код:
mov ecx,[esp+4] ; ecx = адресу переменной X
mov eax,1
lock xadd [ecx],eax; блокирем шину памяти, прибавляем значение регистра eax к тому участку памяти где хранится X а предыдущее значение закидываем в eax.
inc eax ; увеличиваем eax на 1 - хз зачем MS это делает. сам не понимаю. Типа вернет не старое значение а новое. тупость
т.е. даже если после lock xadd [ecx],eax выполнение получит другой поток, то всё будет нормально потому что значение хранится в регисте, а при смене потока автоматом сохраняются значения всех регистров. И потом уже данные будут браться не их паременной X а из регистра eax.
темболее что lock xadd [ecx],eax не может прерваться на половине выполнения. И даже если у тебя многопроцессорная система, то всё равно потоки другова процессора не смогут в этотже момент времяни изменить значение переменной.
Вот такаявот хитро-простая синхронизация может быть сделана
|
|
|

26.08.2009, 12:05
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
Вобщем я пишу парсер. Мне надо, чтобы каждый поток отдельно парсил аккаунты. id++ не поканает тут. Как реализовать это?
я так понял тебе нужно передавать в каждый поток переменную id, каждый раз инкрементируя ее. Для этого нужно почитать тут: http://msdn.microsoft.com/en-us/library/kdzttdcb%28VS.71%29.aspx
Дальше есть неколько замечаний:
- название функции должно отображать то, что она делает а не особенности ее реализации. Thread - так функцию никто не называет. То же касается и Get. Я например не уверен что вообще понял твой вопрос именно из-за дурацких названий функций. переменная 'a' вообще супер...
- писать сетевые приложения на потоках не стоит, это приводит к потреблению кучи ресурсов. Юзай асинхронные сокеты, тем более в windows полно их разновидностей
- хотел еще сказать что писать на борланд билдере не стоит вообще.. но тут вроде это уже говорили.
Последний раз редактировалось bons; 26.08.2009 в 12:07..
|
|
|

26.08.2009, 12:25
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
- писать сетевые приложения на потоках не стоит, это приводит к потреблению кучи ресурсов.
Сетевые какраз и должны работать на потоках потому как работа с сетью - это самое медленное что может быть.
Или если тебя устраивает скорость улитки, то вперед!
Если не юзать потоки то тогда придется тебе работать с неблокируемыми сокетами. Это конечно удобно, но довольно проблематично для новечков.
CPU C2D + Win2k3 и 500 тредов работы с сетью особото и не наггружают сервак зато дают скорость в 250 раз быстрее чем в один поток. потому как даже если у тебя мего скоростной канал, то ты идут большие задержки при ответе сервера. А если данные придут когда поток не выполняется, то они будут находиться в системном буфере и потом благополочку считаются из него. В современных условиях потеря памяти в 100 мб при хз каком кол-ве потоков - это неиграет роли вообще.
Последний раз редактировалось slesh; 26.08.2009 в 12:28..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|