Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 83
1

При синхронизации функции из потока возникает ошибка: "Out of memory"

05.07.2015, 15:19. Просмотров 1456. Ответов 7
Метки нет (Все метки)

Доброго времени суток.
Есть код:
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
59
60
61
62
63
//---------------------------------------------------------------------------
void __fastcall MyThread::Log()
{
    Form1->Edit3->Text = StrToInt(Form1->Edit3->Text) + 1;
}
//---------------------------------------------------------------------------
void __fastcall MyThread::Progress()
{
    Form1->ProgressBar1->Position = Form1->ProgressBar1->Position + 1;
}
//---------------------------------------------------------------------------
void __fastcall MyThread::ProgressInit()
{
    Form1->ProgressBar1->Min = 0;
    Form1->ProgressBar1->Max = Form1->Key_list->Count;
    Form1->ProgressBar1->Step = 1;
}
//---------------------------------------------------------------------------
void __fastcall MyThread::Execute()
{
TIdHTTP* IdHTTP1= new TIdHTTP(NULL) ;
TIdSSLIOHandlerSocketOpenSSL *IdSSLIOHandlerSocketOpenSSL1 = new TIdSSLIOHandlerSocketOpenSSL(NULL);
TIdSocksInfo *IdSocksInfo1 = new TIdSocksInfo(NULL);
TIdCompressorZLib *IdCompressorZLib1 = new TIdCompressorZLib(NULL);
TStringList *sf = new TStringList();
String ClearKey = "", ref;
IdHTTP1->AllowCookies= true;
IdHTTP1->HandleRedirects = true;
IdHTTP1->Compressor =  IdCompressorZLib1;
IdHTTP1->Request->UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; // задаем юзер-агент
IdHTTP1->Request->Accept = "text/html";
IdHTTP1->Request->AcceptLanguage = "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3";
IdHTTP1->Request->Host = "www.google.ru";
IdHTTP1->Request->AcceptEncoding = "gzip";
IdSocksInfo1->Version = svSocks5;
IdSocksInfo1->Host = "31.28.4.8";
IdSocksInfo1->Port = 16932;
IdSSLIOHandlerSocketOpenSSL1->TransparentProxy = IdSocksInfo1;
IdHTTP1->IOHandler = IdSSLIOHandlerSocketOpenSSL1;
IdSocksInfo1->Authentication = saNoAuthentication;
IdSSLIOHandlerSocketOpenSSL1->ConnectTimeout=3000;
IdSSLIOHandlerSocketOpenSSL1->ReadTimeout=3000;
int iter = 0;
Synchronize(&ProgressInit);
while(iter < Form1->Key_list->Count)
{
    ClearKey = "";
    // делаем преобразования с ключем
    ClearKey = DeleteSymbol(Form1->Key_list->Strings[iter]);
    ref=UrlEncode(TIdURI::URLEncode("https://www.google.ru/search?client=opera&q=" + ClearKey + "&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest"));
    sf->Text = IdHTTP1->Get(ref);
    Sleep(2500);
    Synchronize(&Log);
    Synchronize(&Progress); // <---<---
    iter++;
}
delete IdHTTP1;
delete IdSSLIOHandlerSocketOpenSSL1;
delete IdSocksInfo1;
delete IdCompressorZLib1;
delete sf;
}
//--------------------------------------------------------------------------
Проблема заключается в том, что когда в программе используется строчка Synchronize(&Progress); - я получаю ошибки. Если же я закомментирую эту строку, то никаких ошибок не появляется.
Неужто я не правильно работаю с ProgressBar?
C++
1
Form1->ProgressBar1->Position = Form1->ProgressBar1->Position + 1;
Помогите,пожалуйста, разобраться.
0
Миниатюры
При синхронизации функции из потока возникает ошибка: "Out of memory"   При синхронизации функции из потока возникает ошибка: "Out of memory"  
Вложения
Тип файла: zip project.zip (6.87 Мб, 6 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2015, 15:19
Ответы с готовыми решениями:

При первом ходе в игре "города" возникает ошибка при считывании пустого Edit
Есть код... Игра &quot;города&quot;... этот код проверяет схожи ли последняя буква в 1 слове и последняя во...

Ошибка при вызове функции из stl, "Call of nonfunction"
В чем моя ошибка? sqrt не выполняется

Ошибка при компиляции: "E2275 { expected" и "E2040 Declaration terminated incorrectly"
Здравствуйте! При компиляции выдает такую ошибку: C++ Error] Unit1.cpp(12): E2275 { expected ...

Ошибка при работе с ини файлами когда разделителем является не "=", а ":"
Всем привет. Такая проблема имеются файлы &quot;.ini&quot; в них разделителем является не знак &quot;=&quot;, а...

7
Почетный модератор
Эксперт С++
5839 / 2847 / 390
Регистрация: 01.11.2011
Сообщений: 6,883
06.07.2015, 09:48 2
Попробуйте разделить строку на несколько:
C++
1
2
int temp = Form1->ProgressBar1->Position;
Form1->ProgressBar1->Position =  temp + 1;
и посмотреть на какой именно строке выскакивает исключение.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30624 / 19985 / 7814
Регистрация: 22.10.2011
Сообщений: 34,805
Записей в блоге: 6
06.07.2015, 13:38 3
Исключение на самом деле выскакивает вот тут:
C++
1
    sf->Text = IdHTTP1->Get(ref);
, а не там, где рассказал ТС. При этом совершенно безразлично, закомментирован ли Synchronize, или нет.
0
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 83
09.07.2015, 23:41  [ТС] 4
SatanaXIII, не помогло. Ошибка все еще появляется.
volvo, расскажите,пожалуйста,подробнее. Просто на эту строку компилятор не указывал.
P.S. Компилятор вообще не указывал на какую-либо из строк. Я понять не могу,почему с Synchronize есть ошибка, а без него нет.

Не по теме:

P.P.S. Извините за отсутствие в теме


Спасибо за внимание
0
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 83
10.09.2015, 12:59  [ТС] 5
Здравствуйте.
Я попробовал переделать чуть-чуть код:
C++
1
2
3
TMemoryStream *MS = new  TMemoryStream();
...
IdHTTP1->Get(ref, MS);
Ошибка осталась прежней.
Я не знаю как с ней справиться. Помогите,пожалуйста.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30624 / 19985 / 7814
Регистрация: 22.10.2011
Сообщений: 34,805
Записей в блоге: 6
10.09.2015, 14:00 6
Цитата Сообщение от HelloWold Посмотреть сообщение
Я понять не могу,почему с Synchronize есть ошибка, а без него нет
Я уже написал, что ошибка возникает НЕЗАВИСИМО от присутствия Synchronize. Ты опять начал гнуть свою линию. Ну, раз ты считаешь, что влияет Synchronize, то и дальше решай сам, ты ж не слушаешь, что тебе говорят, на фиг надо тебе отвечать? Чтобы ты опять пришел и начал твердить свое? Спасибо, меня это не интересует.

Чтобы понять, где происходит исключение, нужно отлаживать программу (пошаговый режим, точки останова), а не просто вывалить ее на форум и сидеть ждать, когда кто-то придет и сделает твою работу за тебя.
2
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 83
11.09.2015, 22:06  [ТС] 7
volvo, прошу прощение за мою тупость.
Попробовал я поработать с точками останова, но как-то не особо понятно.
Поместив курсор на строку:
C++
1
IdHTTP1->Get(ref, MS);
И дождавшись появления ошибки я сравнил значения переменных - они остались неизменными( те, которые и не должны меняться).
Так же во время ошибки(скрин 1), появились какие-то неизвестные переменные.
В общем,я запутался,и не знаю как выйти из данной ситуации.

Не по теме:

Посмотрел в интернете примеры(break point), но они поверхностные и тривиальные.

0
Миниатюры
При синхронизации функции из потока возникает ошибка: "Out of memory"  
Изображения
 
0 / 0 / 0
Регистрация: 09.02.2015
Сообщений: 83
14.09.2015, 22:47  [ТС] 8
volvo, да, Вы были правы. Ошибка в данной строке:
C++
1
sf->Text = IdHTTP1->Get(ref);

Не по теме:

Пришел к данному выводу, закомментировав большую часть кода(метод исключения)


Все мои усилия, для устранения ошибки, оказались тщетны.
Сперва была мысль, что в самом объекте идет переполнение(так как он не очищается и используется в цикле 1000 раз), но данная мыслишка отлетела после того, как я чуть-чуть переписал код - стал в цикле создавать и уничтожать объект класса IdHTTP. Ошибка осталась, следовательно, я не прав.
Было еще несколько идей, но они так же отлетели.
Так же стал рассматривать данную переменную в Watch List. После появления Out of Memory, единственное, что я увидел - это ошибку E2451 Underfined symbol 'IdHTTP1'.

В общем, я в ступоре. Не знаю, в какую сторону дальше двигаться.
0
Миниатюры
При синхронизации функции из потока возникает ошибка: "Out of memory"  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2015, 22:47

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add")
При использовании следующего кода: Word = CreateOleObject(&quot;Word.Application.8&quot;);...

Ошибка "Insufficient memory for this operation"
Здравствуйте! У меня есть таблица, которая содержит в себе Логин и Пароль. Я пытаюсь записать в...

При выводе значений функции возникает ошибка "Это вычисление не приближается к решению"
Добрый вечер. При выводе значений функции возникает ошибка &quot;Это вычисление не приближается к...

При создании нового файла "*.mdb" возникает "ошибка связи с сервером OLE"
При создании нового файла &quot;*.mdb&quot; &quot;ошибка связи с сервером OLE&quot;. Выскакивают окна Окно 1...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.