Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Deimon
 Аватар для Deimon
34 / 34 / 2
Регистрация: 29.08.2009
Сообщений: 178
06.04.2012, 13:29     HRGN, CombineRgn. Программа работает некоторое время и виснит. #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 минут
черт с той задачей, объясните фокус с последним кодом
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 13:29     HRGN, CombineRgn. Программа работает некоторое время и виснит.
Посмотрите здесь:

C++ прога запускается сама через некоторое время
Выполнение действий через некоторое время C++
Изменение фактического состояния объекта не мгновенно по вызове метода, а через некоторое время C++
Программа запрашивает время C++
C++ Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
Скорочтение (приостановить программу в консольном окне на некоторое время) C++
Работа со стеком. Программа, которая к вершине стека добавляет некоторое число, а следующему элементу присваивает значение предыдущего C++
C++ Есть ли возможность выполнять цикл некоторое время

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deimon
 Аватар для Deimon
34 / 34 / 2
Регистрация: 29.08.2009
Сообщений: 178
17.11.2012, 18:56  [ТС]     HRGN, CombineRgn. Программа работает некоторое время и виснит. #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));
Yandex
Объявления
17.11.2012, 18:56     HRGN, CombineRgn. Программа работает некоторое время и виснит.
Ответ Создать тему
Опции темы

Текущее время: 18:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru