Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Deimon
35 / 35 / 2
Регистрация: 29.08.2009
Сообщений: 178
#1

HRGN, CombineRgn. Программа работает некоторое время и виснит. - C++

06.04.2012, 13:29. Просмотров 712. Ответов 1
Метки нет (Все метки)

Задача: искать пересечения регионов и подсчитывать их.
В итоге: программа компилится, работает, работает...а потом виснит (своеобразно) При чем время до зависания напрямую зависит от скорости наступления события OnTime Таймера.
Помогите понять что вызывает такой эффект. Я не очень понимаю как устроена структура регионов и может быть я делаю с ними то, чего не стоило бы делать



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
64
65
66
67
68
//Unit1.h
struct GPS
{
    short x;
    short y;
};
enum NAMEOBJECT
{
    PLAYER = 0,
    SOLDER
};
void ShowRegionByName(HRGN hRgn, GPS gps, NAMEOBJECT name) {
 
 
    switch (name)
    {
        case PLAYER :
            break;
        case SOLDER :
            TPoint tp[29];
            tp[0] = TPoint(21,0);
            tp[1] = TPoint(30,0);
            tp[2] = TPoint(34,5);
            tp[3] = TPoint(34,11);
            tp[4] = TPoint(30,14);
            tp[5] = TPoint(37,8);
            tp[6] = TPoint(37,33);
            tp[7] = TPoint(34,44);
            tp[8] = TPoint(31,72);
            tp[9] = TPoint(34,77);
            tp[10] = TPoint(34,60);     //
            tp[11] = TPoint(26,60);     //
            tp[12] = TPoint(28,60);      //
            tp[13] = TPoint(25,60);      //
            tp[14] = TPoint(25,64);
            tp[15] = TPoint(21,72);
            tp[16] = TPoint(20,60);      //
            tp[17] = TPoint(19,69);      //
            tp[18] = TPoint(11,68);      //
            tp[19] = TPoint(12,54);      //
            tp[20] = TPoint(13,78);
            tp[21] = TPoint(14,65);
            tp[22] = TPoint(10,63);
            tp[23] = TPoint(3,68);
            tp[24] = TPoint(7,58);
            tp[25] = TPoint(13,46);
            tp[26] = TPoint(17,20);
            tp[27] = TPoint(21,17);
            tp[28] = TPoint(18,4);
            hRgn = CreatePolygonRgn(tp,29,WINDING);
            OffsetRgn(hRgn, gps.x, gps.y);
            break;
 
    }
 
 
}
 
int result;
bool RegionX(GPS pos, NAMEOBJECT name) {
    HRGN temp, temp1, temp2;
    ShowRegionByName(temp1,pos,name);
    GPS poss;
    poss.x = Random(100);
    poss.y = Random(100);
    ShowRegionByName(temp2,poss,SOLDER);
    return CombineRgn( temp,temp1,temp2,RGN_AND);
}
C++
1
2
//OnCreate(Form1)
result = 0;
C++
1
2
3
4
5
6
7
8
9
10
11
//OnTime (Timer1)
    for (int i = 0; i < 100; i++) {
        GPS newpos;
        newpos.x=Random(100);
        newpos.y=Random(100);
        if (RegionX(newpos,SOLDER))
        {
            result++;
        }
    }
    Form1->Caption= result;
Добавлено через 3 часа 58 минут
Объясните кто-нибудь, почему в таком примитивном и явном примере возвращяет false
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    HRGN temp;
    HRGN temp1;
    HRGN temp2;
 
 
 
    temp1 = CreateRectRgn(10,10,100,100);
    temp2 = CreateRectRgn(20,20,110,110);
 
           bool BOOL = (bool)CombineRgn(temp,temp1,temp2,RGN_AND);
    DeleteObject(temp);
    DeleteObject(temp1);
    DeleteObject(temp2);
    ShowMessage(BoolToStr(BOOL));
Добавлено через 17 часов 7 минут
черт с той задачей, объясните фокус с последним кодом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 13:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос HRGN, CombineRgn. Программа работает некоторое время и виснит. (C++):

Программа , которая выводит время, за которое программа работает - C++
Вообщем, нужно что бы считалось время от начала работы программы, и выводилось на экран.

За какое время работает программа? - C++
#include&lt;iostream&gt;//линейный поиск #include &lt;ctime&gt; using namespace std; int linear_search(int array, int size, int searchValue){...

Выполнение действий через некоторое время - C++
хочу сделать так чтобы на экран выводились всякие символы через некторое время. ну например: сначала на экран выводится П черех несколько...

Есть ли возможность выполнять цикл некоторое время - C++
Существует ли в С++ возможность выполнять цикл,скажем,ровно 15 секунд,или таковой возможности нету? Варианты вроде while...

прога запускается сама через некоторое время - C++
как осущиствить?Скажем открыл прогу,она должна добавляться в реестр что ли?Нужно чтобы через ень открылась снова Добавлено через 58...

Скорочтение (приостановить программу в консольном окне на некоторое время) - C++
Как приостановить программу в консольном окне на некоторое время, чтоб потом она автоматически выполнялась???

1
Deimon
35 / 35 / 2
Регистрация: 29.08.2009
Сообщений: 178
17.11.2012, 18:56  [ТС] #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    HRGN temp;
    HRGN temp1;
    HRGN temp2;
 
 
    temp = CreateRectRgn(0,0,0,0);  //с этим работает
    temp1 = CreateRectRgn(10,10,100,100);
    temp2 = CreateRectRgn(20,20,110,110);
 
           bool BOOL = (bool)CombineRgn(temp,temp1,temp2,RGN_AND);
    DeleteObject(temp);
    DeleteObject(temp1);
    DeleteObject(temp2);
    ShowMessage(BoolToStr(BOOL));
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 18:56
Привет! Вот еще темы с ответами:

Изменение фактического состояния объекта не мгновенно по вызове метода, а через некоторое время - C++
Хочу сделать чтобы после вызова метода объекта изменение состояния объекта происходило только через некоторое время, например 3 минуты. Как...

Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...) - C++
Уважаемые форумчане, нужна ваша помощь. Нужно составить программу, которая интерпретирует старшие 3 бита как некоторое число n и...

Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего - C++
Есть некоторый стек, в каждом элементе которого записаны по два целых числа. Нужно сделать программу которая к вершине стека добавляет...

Программа выключается через некоторое время - Visual C++
Написал программу в vc++, запустил в режиме отладки. А она должна считать, много, иногда несколько суток. Но она выключается произвольно....


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

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

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