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

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

Войти
Регистрация
Восстановить пароль
 
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
#1

Зависание и/или остановка работы - C++

12.11.2013, 22:42. Просмотров 328. Ответов 5
Метки нет (Все метки)

Доброго времени суток, коллеги!
Не знаю, как сформулировать проблему, так что извините за некоторый сумбур в изложении.
Итак, что у нас есть.
Есть класс-родитель CMyPoint. Объекты класса (их 1000) выводят на экран точки с рандомными цветами и положением на экране. Условно получается картина звездного неба. От CMyPoint 6 наследников. CMyFly (разлетаюшиеся из центра точки-звезды, 400 штук), CMyPlanet (планеты вокруг центра, 6 планет) и так далее. Все это барахло "засунуто" в объект-список, в сумме порлучается около 2500 экземпляров от всех классов, но CMyPoint больше всего.
Теперь о проблеме. Компиляция и сборка проходят без ошибок (настройки стандартные + Static library). Дальше - чудеса.
При компиляции с настройками Platform Toolset по-умолчанию (Visual studio 2012 v110, режим - DEBUG) программа при выполнении зависает секунд через 10. Если на созданный файл поставить совместимость с Windows 7, то он работает, но в диспетчере задач указано "программа не отвечает".
В режиме "RELEASE" без совместимости выполнение останавливается без причин, но программа НЕ(!) висит. С совместимостью ситуация похожая, только выполнение длится дольше.
Система W8.1 x64, Студия VS2012 Update 3
Есть свинское подозрение, что виноват модуль паинт, потому как приходится рисовать ну ОЧЕНЬ много, соответственно, происходят бесконечные вызовы соответствующих методов и расходуются ресурсы. К сожалению, в теме практически чайник, потому сам решить проблему не могу. Но она для меня правда много значит.
М.б. какие-то директивы компилятору, настройки самой студии, перекомпиляция на Windows 7 или в другой версии студии, или какое-то изменение кода смогут помочь. Единственное о чем прошу, учитывайте мой уровень в теме - точнее, его полное отсутствие. Потому - как для чайников (и с картинками :-))
Буду благодарен за советы и предложения, как можно исправить ситуацию минимальными затратами.
Спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 22:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Зависание и/или остановка работы (C++):

Зависание или ошибка при компиляции microsoft Visual Studio 2008 - C++
microsoft Visual Studio 2008 писал на C++ Все раньше было хорошо. Возникла такая проблема. При компиляции программы не создается *.exe...

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

Какой проект открыть для работы с файлом или БД? - C++
Kakoi proect lychshe otkrut dlya rabotu s file i database. Nyshno chitat file a potom dannue sanosit v database.

Что лучше использовать для работы со строками класс wstring или wchar_t напрямую? - C++
Всем привет! Мучает меня один вопрос: как грамотнее и безопаснее работать со строками: 1) Создавать экземпляр класса wstring и работать...

Остановка цикла do while - C++
Доброго времени суток. Столкнулся с такой проблемой в решении задачи: Дана числовая последовательность целых чисел и одно дробное, нужно...

Остановка вектора - C++
Здравствуйте! Помогите пожалуйста реализовать в ниже приведенном коде, как остановить функцию readlong как только появиться точка или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
12.11.2013, 22:43 #2
SwanSONG, скиньте код, поглядим, что да как (и не забудьте про тэги)
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
13.11.2013, 21:02  [ТС] #3
Стартер StarSki:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "afxwin.h"
#include "CMainWnd.h"
 
class CMyApp:public CWinApp
{
public:
    CMyApp();
    virtual BOOL InitInstance();
};
 
CMyApp::CMyApp()
{}
 
BOOL CMyApp::InitInstance()
{
    m_pMainWnd=new CMainWnd();
    ASSERT(m_pMainWnd);
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
};
 
CMyApp theApp;

CMainWnd.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include "afxwin.h"
 
class CMainWnd:public CFrameWnd
{
public:
    CMainWnd();
    afx_msg void OnPaint();
    BOOL CMainWnd::OnEraseBkgnd(CDC *pDC);
 
    void RandomColor(int &tColor1,int &tColor2,int &tColor3);
    void StatOut(int f,CDC *xdc);
    void XSelectColor(int tF,COLORREF *tColo1,COLORREF *tColor2);
 
    //Геометрия
    int gWidth,gDrawHeight;
 
private:
    DECLARE_MESSAGE_MAP();
};

CMainWnd.cpp:
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
#include "afxwin.h"
#include "time.h"
#include "math.h"
#include "CMainWnd.h"
#include "CMyPaintDC.h"
#include "XConst.h"
 
#include "CMyList.h"
#include "CMyPoint.h"
#include "CMyFly.h"
#include "CMyPulsar.h"
#include "CMyStar.h"
#include "CMyAim.h"
#include "CMyPlanet.h"
 
CMainWnd::CMainWnd()
{
    Create(NULL,_T("StarSKI"),NULL,rectDefault,NULL,NULL);
    CMainWnd::SetWindowPos(&wndTop,WinPosX,WinPosY,WinSizeX,WinSizeY,SWP_SHOWWINDOW);
}
 
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
 
BOOL CMainWnd::OnEraseBkgnd(CDC *pDC)
{
    CBrush backBrush(RGB(6,38,77));
    CBrush *pOldBrush = pDC->SelectObject(&backBrush);
    CRect rect;
    pDC->GetClipBox(&rect);
    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);
    pDC->SelectObject(pOldBrush);
    return TRUE;
}
 
void CMainWnd::OnPaint()
{
    int i,f=-1;
    int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
    CString t15;
 
    int fPoint=0,fFly=1,fPlanet=0,fStar=1,fPulsar=1,fAim=0;
    CString tString;
    CString tName[7]={"Aim","Mercury","Venus","Earth","Mars","Jupiter","Saturn"};
 
    CMyPaintDC dc(this);
 
    //Получение реальных размеров
    RECT ZX1,ZX2;
    GetWindowRect(&ZX1); //Размеры всего окна
    GetClientRect(&ZX2); //Размеры рабочей области
        
    gDrawHeight=ZX2.bottom-gStatHeight-gBorder;
    gWidth=ZX2.right;
 
    CMyList *pList;
    pList=new CMyList();
 
    srand(time(NULL));
 
    //[0]Обычные звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iR(8),int iG(9),int iB(10))
    if(fPoint==0)
    {
        t0=0;t1=0;
        for(i=0;i<zStar;i++)
        {
            t2=7;//t2=rand()%5;
            t3=gWidth;
            t4=gDrawHeight;
            t5=rand()%200;
            t6=rand()%gWidth;
            t7=rand()%gDrawHeight;
            RandomColor(t8,t9,t10);
 
            pList->AddList(new CMyPoint(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10));
        }
    }
 
    //[1]Разлетающиеся звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iR(8),int iG(9),int iB(10))
    if(fFly==0)
    {
        t0=1;t2=7;
        for(i=0;i<zFlyStar;i++)
        {
            t3=gWidth;
            t4=gDrawHeight;
            t5=rand()%350;
            t6=rand()%200+gWidth/2-100;
            t7=rand()%200+gDrawHeight/2-100;
            RandomColor(t8,t9,t10);
            if((t6>=gWidth/2)&&(t7<gDrawHeight/2))
                t1=1;
            if((t6>=gWidth/2)&&(t7>=gDrawHeight/2))
                t1=2;
            if((t6<gWidth/2)&&(t7>=gDrawHeight/2))
                t1=3;
            if((t6<gWidth/2)&&(t7<gDrawHeight/2))
                t1=4;
 
            pList->AddList(new CMyFly(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10));
        }
    }
 
    //[2]Планеты (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iRadius1(8),int iRadius2(9),int iF(10),int iA(11),int iR(12),int iG(13), int iB(14),CString iName(15)):
    if(fPlanet==0)
    {
        f=1;
        t0=2;
        t1=0;
        t2=0;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t6=gWidth/2;
        t7=gDrawHeight/2;
        t9=zPlanetRadius;
        for(i=0;i<zPlanet;i++)
        {
            t8=60+60*i;
            t10=f;f*=-1;
            t11=110+60*i;
            RandomColor(t12,t13,t14);
            t15=tName[i+1];
            pList->AddList(new CMyPlanet(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15));
        }
    }
    
    //[3]Большие звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iF(8),int iA(9),int iRadius(10),int iR(11),int iG(12), int iB(13))
    if(fStar==0)
        for(i=0;i<zBigStar;i++)
        {
            t0=3;
            t1=0;
            t2=7;
            t3=gWidth-30;
            t4=gDrawHeight-30;
            t5=rand()%200;
            t6=rand()%(gWidth-30);
            t7=rand()%(gDrawHeight-30);
            t8=rand()%3-1;
            t9=rand()%360;
            t10=rand()%15+1;
            RandomColor(t11,t12,t13);
 
            pList->AddList(new CMyStar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        }
    
    //[4]Пульсары (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iA(8),int iF(9),int iNum(10),int iR(11),int iG(12), int iB(13))
    if(fPulsar==0)
    {
        t0=4;
        t1=0;
        t2=7;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t8=0;
        
        t6=gWidth/2;t7=gDrawHeight/2;t8=0;t9=0;t10=10;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth/2;t7=gDrawHeight/2;t8=0;t9=0;t10=14;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=zPulsarDist;t7=zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=zPulsarDist;t7=zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=gWidth-zPulsarDist;t7=zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth-zPulsarDist;t7=zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
                        
        t6=gWidth-zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth-zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
    }
 
    //[5]Прицел (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int ilimit(5),int ix(6),int iy(7),int iAngel(8),int iRadius(9),int iR(10),int iG(11),int iB(12))
    if(fAim==0)
    {
        t0=5;
        t1=rand()%3+1;
        t2=0;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t6=gWidth/2;
        t7=gDrawHeight/2;
        t8=0;
        t9=70;
        t10=70;
        t11=70;
        t12=70;
        
        pList->AddList(new CMyAim(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12));
    }
    
    pList->SearchTarget();
 
    StatOut(0,&dc);
    i=0;
    while(i<5000)
    {
        pList->MoveAll(&dc);
        StatOut(1,&dc);
        i++;
    }
}
void CMainWnd::RandomColor(int &tColor1,int &tColor2,int &tColor3)
{
    tColor1=rand()%255;
    tColor2=rand()%255;
    tColor3=rand()%255;
}
 
void CMainWnd::StatOut(int f,CDC *xdc)
{
    COLORREF tColor1,tColor2;
    CBrush bStatBox(cStatBrush);
    CPen pStatBox(PS_SOLID,1,cStatPen);
 
    int i,tInt=gDrawHeight+35;
    CString tString;
 
    if(f==0)
    {
        //Сохраняем цвета
        CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
        CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
                
        //Рамка статистики
        xdc->SelectObject(pStatBox);
        xdc->SelectObject(bStatBox);
        xdc->Rectangle(gBorder,gDrawHeight,gWidth-gBorder,gDrawHeight+gStatHeight);
 
        //Линия под названиями планет
        xdc->MoveTo(150,gDrawHeight+30);
        xdc->LineTo(gWidth-gBorder*2,gDrawHeight+30);
 
        //Шапка (слева)
        xdc->TextOut(gBorder*2,tInt,"Position X:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Position Y:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Distance to aim:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Hit count:");tInt+=gDistText;
 
        //Шапка (верх)
        tInt=gDrawHeight+10;
        for(i=0;i<zPlanet;i++)
            xdc->TextOut(150+160*i,tInt,TargetPos[i+1].sName);
        
        //Восстанавливаем цвета
        xdc->SelectObject(pOldPen);
        xdc->SelectObject(pOldBrush);
    }
    if(f==1)
    {
        //Сохраняем цвета
        CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
        CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
        COLORREF xTextColor=xdc->GetTextColor();
        COLORREF xBkColor=xdc->GetBkColor();
 
        //Внутрення плашка
        xdc->Rectangle(150-gBorder,gDrawHeight+30,gWidth-gBorder*2,gDrawHeight+gStatHeight-gBorder);
        
        //Статитиска (цифры)
        for(i=0;i<zPlanet;i++)
        {
            XSelectColor(TargetPos[i+1].fX,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sPosX);
            xdc->TextOut(150+160*(i),tInt,tString);
 
            XSelectColor(TargetPos[i+1].fY,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sPosY);
            xdc->TextOut(150+160*(i),tInt+gDistText,tString);
 
            XSelectColor(TargetPos[i+1].fDist,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sDist);
            xdc->TextOut(150+160*(i),tInt+2*gDistText,tString);
 
            XSelectColor(TargetPos[i+1].fAim,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sHitCount);
            xdc->TextOut(150+160*(i),tInt+3*gDistText,tString);
        }
 
        //Восстанавливаем цвета
        xdc->SelectObject(pOldPen);
        xdc->SelectObject(pOldBrush);
        xdc->SetTextColor(xTextColor);
        xdc->SetBkColor(xBkColor);
    }
}
 
void CMainWnd::XSelectColor(int tF,COLORREF *tColor1,COLORREF *tColor2)
{
    if(tF==0)
    {
        *tColor1=cMiddleValue;
        *tColor2=cBackTextInActive;
    }
    if(tF==1)
    {
        *tColor1=cLowValue;
        *tColor2=cBackTextActive;
    }
    if(tF==2)
    {
        *tColor1=cHighValue;
        *tColor2=cBackTextActive;
    }
}

CMyList.h:
Кликните здесь для просмотра всего текста
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
#pragma once
#include "CMyPoint.h"
#include "CMyAim.h"
#include "CMyPlanet.h"
 
struct SMyNode
{
    SMyNode *pNext;
    CMyPoint *pObj;
};
 
class CMyList
{
public:
    CMyList(void);
    ~CMyList(void);
 
    void AddList(CMyPoint *pNObject);
    void ShowAll(CDC *xdc);
    void MoveAll(CDC *xdc);
    void SearchTarget();
    void MaxMin(int *ptr);
    void ZSort(int *tArray,int *tMax,int *tMin);
 
    SMyNode *pHead,*pCurr,*pTemp;
 
    CMyPoint *ptrPoint;
    CMyPlanet *ptrPlanet;
    CMyAim *ptrAim;
};

CMyList.cpp
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
#include "afxwin.h"
#include "math.h"
#include "CMyList.h"
#include "CMyAim.h"
#include "XConst.h"
//#include "XStruct.h"
 
CMyList::CMyList(void)
{
    pHead=NULL;
}
 
CMyList::~CMyList()
{
    while(pHead!=NULL)
    {
        pTemp->pNext;
        delete pHead->pObj;
        delete pHead;
        pHead=pTemp;
    }
}
 
void CMyList::AddList(CMyPoint *pNObject)
{
    if(pHead==NULL)
    {
        pHead=new SMyNode;
        pHead->pNext=NULL;
        pHead->pObj=pNObject;
    }
    else
    {
        pCurr=pHead;
        while(pCurr->pNext!=NULL)
            pCurr=pCurr->pNext;
        pCurr->pNext=new SMyNode;
        pCurr=pCurr->pNext;
        pCurr->pNext=NULL;
        pCurr->pObj=pNObject;
    }
}
 
void CMyList::ShowAll(CDC *xdc)
{
    pCurr=pHead;
    while(pCurr!=pHead)
    {
        pCurr->pObj->Show(xdc);
        pCurr=pCurr->pNext;
    }
}
 
void CMyList::SearchTarget()
{
    int i=1;
    
    pCurr=pHead;
    while(pCurr!=NULL)
    {
        if(pCurr->pObj->idType==5)
            TargetPos[0].ptr=pCurr->pObj;
 
        if(pCurr->pObj->idType==2)
        {
            TargetPos[i].ptr=pCurr->pObj;
            ptrPlanet=dynamic_cast<CMyPlanet*>(TargetPos[i].ptr);
            TargetPos[i].sName=ptrPlanet->vName;
            i++;
        }
        pCurr=pCurr->pNext;
    }
}
 
void CMyList::MoveAll(CDC *xdc)
{
    int idType,idPos,idColor;
    int t1=0,t2=0,t3=0,t4=0,t5=0;
    int tInt,i=1;
    int tArray[4][6];
    
    pCurr=pHead;
    while(pCurr!=NULL)
    {
        ptrPoint=pCurr->pObj;
 
        idType=pCurr->pObj->idType;
        idPos=pCurr->pObj->idPos;
        idColor=pCurr->pObj->idColor;
 
        //обработка позиции
        if(idPos==0)
        {
            t1=0;t2=0;
        }
        if(idPos==1)
        {
            t1=1;t2=-1;
        }
        if(idPos==2)
        {
            t1=1;t2=1;
        }
        if(idPos==3)
        {
        t1=-1;t2=1;
        }
        if(idPos==4)
        {
            t1=-1;t2=-1;
        }
 
        //обработка цвета
        if(idColor==0)
        {
            t3=0;t4=0;t5=0;
        }
        if(idColor==1)
        {
            t3=1;t4=0;t5=0;
        }
        if(idColor==2)
        {
            t3=0;t4=1;t5=0;
        }
        if(idColor==3)
        {
            t3=0;t4=0;t5=1;
        }
        if(idColor==4)
        {
            t3=1;t4=1;t5=0;
        }
        if(idColor==5)
        {
            t3=0;t4=1;t5=1;
        }
        if(idColor==6)
        {
            t3=1;t4=0;t5=1;
        }
        if(idColor==7)
        {
            t3=1;t4=1;t5=1;
        }
 
        pCurr->pObj->Move(t1,t2,t3,t4,t5,xdc);
 
        //Обработка целей
        if(ptrPoint->idType==5)
        {
            ptrAim=dynamic_cast<CMyAim*>(ptrPoint);
            TargetPos[0].sPosX=ptrPoint->vx;
            TargetPos[0].sPosY=ptrPoint->vy;
        }
        if(ptrPoint->idType==2)
        {
            ptrPlanet=dynamic_cast<CMyPlanet*>(ptrPoint);
            TargetPos[i].sPosX=ptrPlanet->PosPlanetX;tArray[0][i-1]=TargetPos[i].sPosX;
            TargetPos[i].sPosY=ptrPlanet->PosPlanetY;tArray[1][i-1]=TargetPos[i].sPosY;
            i++;
        }
        
        pCurr=pCurr->pNext;
    }
    
    t1=TargetPos[0].sPosX;
    t2=TargetPos[0].sPosY;
    
    for(i=1;i<=zPlanet;i++)
    {
        t3=TargetPos[i].sPosX;
        t4=TargetPos[i].sPosY;
        tInt=static_cast<int>(sqrt((double)(abs((t3-t1)*(t3-t1)+(t4-t2)*(t4-t2)))));
        if(tInt<=zPlanetRadius)
            TargetPos[i].sDist=0;
        if(tInt>zPlanetRadius)
            TargetPos[i].sDist=tInt-zPlanetRadius;
        
        tArray[2][i-1]=TargetPos[i].sDist;
    }
 
    for(i=1;i<=zPlanet;i++)
    {
        if((TargetPos[i].sDist==0)&&(TargetPos[i].f==0))
        {
            TargetPos[i].sHitCount++;
            TargetPos[i].f=1;
 
            ptrPlanet=dynamic_cast<CMyPlanet*>(TargetPos[i].ptr);
            t1=rand()%255;
            t2=rand()%255;
            t3=rand()%255;
 
            ptrPlanet->xF*=-1;
            ptrPlanet->vR=t1;
            ptrPlanet->vG=t2;
            ptrPlanet->vB=t3;
        }
        if(TargetPos[i].sDist>zPlanetRadius)
            TargetPos[i].f=0;
        tArray[3][i-1]=TargetPos[i].sHitCount;
    }
    
    for(i=1;i<zPlanet+1;i++)
    {
        TargetPos[i].fDist=0;
        TargetPos[i].fX=0;
        TargetPos[i].fY=0;
        TargetPos[i].fAim=0;
    }
    MaxMin(&tArray[0][0]);
}
 
void CMyList::MaxMin(int *ptr)
{
    int i,j,m=3,n=6;
    int tMax,tMin;
    int *tLine = new int[n];
 
    for(i=0;i<=m;i++)
    {
        for(j=0;j<n;j++)
            tLine[j]=*(ptr+i*n+j);
        tMax=0;tMin=0;
        ZSort(tLine,&tMax,&tMin);
 
        for(j=0;j<n;j++)
        {
            if((tLine[j]==tMax)&&(i==0))
                TargetPos[j+1].fX=2;
            if((tLine[j]==tMax)&&(i==1))
                TargetPos[j+1].fY=2;
            if((tLine[j]==tMax)&&(i==2))
                TargetPos[j+1].fDist=2;
            if((tLine[j]==tMax)&&(i==3))
                TargetPos[j+1].fAim=2;
            
            if((tLine[j]==tMin)&&(i==0))
                TargetPos[j+1].fX=1;
            if((tLine[j]==tMin)&&(i==1))
                TargetPos[j+1].fY=1;
            if((tLine[j]==tMin)&&(i==2))
                TargetPos[j+1].fDist=1;
            if((tLine[j]==tMin)&&(i==3))
                TargetPos[j+1].fAim=1;
        }
    }
}
 
void CMyList::ZSort(int *tLine,int *zMax,int *zMin)
{
    int i;
 
    *zMax=tLine[0];
    *zMin=tLine[0];
    for(i=1;i<zPlanet;i++)
    {
        if(tLine[i]>*zMax)
            *zMax=tLine[i];
        if(tLine[i]<*zMin)
            *zMin=tLine[i];
    }
}

И примеры классов с графикой
CMyPoint.h:
Кликните здесь для просмотра всего текста
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
#pragma once
 
#include "afxwin.h"
 
class CMyPoint
{
public:
    CMyPoint(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iR,int iG,int iB);
    ~CMyPoint();
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    void xSetCommon(int dx,int dy,int dR,int dG,int dB);
    void Move(int dx,int dy,int dR,int dG,int dB,CDC *xdc); 
 
    CDC *xdc;
 
    int idType,idPos,idColor;
    int vSizeX,vSizeY;
    int vLimit,vCount;
    int vx,vy;
    int vR,vG,vB;
};

CMyPoint.cpp:
Кликните здесь для просмотра всего текста
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
#include "afxwin.h"
 
#include "CMyPoint.h"
#include "CMyPoint.h"
#include "XConst.h"
 
CMyPoint::CMyPoint(int iiType,int iiPos,int iiColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iR,int iG,int iB)
{
    idType=iiType;
    idPos=iiPos;
    idColor=iiColor;
    vSizeX=iMaxX;
    vSizeY=iMaxY;
 
    vLimit=iLimit;
    vCount=0;
    vx=ix;
    vy=iy;
    vR=iR;
    vG=iG;
    vB=iB;
}
 
CMyPoint::~CMyPoint()
{}
 
void CMyPoint::Show(CDC *xdc)
{
    xdc->SetPixel(vx,vy,RGB(vR,vG,vB));
}
 
void CMyPoint::Hide(CDC *xdc)
{
    xdc->SetPixel(vx,vy,cSpace);
}
 
void CMyPoint::xSetCommon(int dx,int dy,int dR,int dG,int dB)
{
    vx+=dx;
    vy+=dy;
    vR+=dR;
    vG+=dG;
    vB+=dB;
}
 
void CMyPoint::xSetPrivate()
{
    vCount++;
    if(vCount>=vLimit)
    {
        vCount=0;
        vx=rand()%vSizeX;
        vy=rand()%vSizeY;
        vLimit=rand()%600;
    }
}
 
void CMyPoint::Move(int dx,int dy,int dR,int dG,int dB, CDC *xdc)
{
    Hide(xdc);
    xSetCommon(dx,dy,dR,dG,dB);
    xSetPrivate();
    Show(xdc);
}

CMyAim.h
Кликните здесь для просмотра всего текста
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
#pragma once
#include "cmypoint.h"
 
class CMyAim:public CMyPoint
{
public:
    CMyAim(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iAngel,int iRadius,int iR,int iG,int iB);
    ~CMyAim(void);
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    virtual double xSetX(int zA,int zR);
    virtual double xSetY(int zA,int zR);
 
    CPen *pPen1,*pPen2,*pPen3;
    CBrush *pBrush;
 
//  int tLimitX,tLimitY;
    int vRadius;
    //,tCount;
    int vAngel;
    int tX,tY;
};

CMyAim.cpp
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "afxwin.h"
#include "math.h"
#include "CMyPoint.h"
#include "CMyAim.h"
#include "XConst.h"
 
CMyAim::CMyAim(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iAngel,int iRadius,int iR,int iG,int iB):CMyPoint(iType,iPos,iColor,iMaxX,iMaxY,iLimit,ix,iy,iR,iG,iB)
{
    vAngel=iAngel;
    vRadius=iRadius;
}
 
CMyAim::~CMyAim(void)
{
}
 
void CMyAim::Show(CDC *xdc)
{
    int i;
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    xdc->SelectStockObject(NULL_BRUSH);
    CPen tPen1(PS_DOT,1,RGB(vR,vG,vB));
    CPen tPen2(PS_SOLID,1,cAimOut);
    CPen tPen3(PS_SOLID,1,cAimIn);
 
    //2 круга
    xdc->SelectObject(tPen2);
    xdc->Ellipse(vx-vRadius,vy-vRadius,vx+vRadius,vy+vRadius);
    xdc->SelectObject(tPen3);
    xdc->Ellipse(vx-10,vy-10,vx+10,vy+10);
 
    //статичные линии на весь экран
    xdc->SelectObject(tPen1);
    xdc->MoveTo(0,vy);xdc->LineTo(vx-vRadius-5,vy);
    xdc->MoveTo(vx+vRadius+5,vy);xdc->LineTo(vSizeX,vy);
    xdc->MoveTo(vx,0);xdc->LineTo(vx,vy-vRadius-5);
    xdc->MoveTo(vx,vy+vRadius+5);xdc->LineTo(vx,vSizeY);
 
    //крутящийся внутренний прицел
    xdc->SelectObject(tPen3);
    for(i=0;i<4;i++)
    {
        tX=static_cast<int>(xSetX(vAngel+90*i,vRadius));
        tY=static_cast<int>(xSetY(vAngel+90*i,vRadius));
        xdc->MoveTo(vx,vy);xdc->LineTo(tX,tY);
    }
 
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyAim::Hide(CDC *xdc)
{
    int i;
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    xdc->SelectStockObject(NULL_BRUSH);
 
    CPen tPen(PS_SOLID,1,RGB(6,38,77));
    xdc->SelectObject(tPen);
 
    xdc->Ellipse(vx-vRadius,vy-vRadius,vx+vRadius,vy+vRadius);
    xdc->Ellipse(vx-10,vy-10,vx+10,vy+10);
 
    xdc->MoveTo(0,vy);xdc->LineTo(vx-vRadius-5,vy);
    xdc->MoveTo(vx+vRadius+5,vy);xdc->LineTo(vSizeX,vy);
    xdc->MoveTo(vx,0);xdc->LineTo(vx,vy-vRadius-5);
    xdc->MoveTo(vx,vy+vRadius+5);xdc->LineTo(vx,vSizeY);
 
    for(i=0;i<4;i++)
    {
        tX=static_cast<int>(xSetX(vAngel+90*i,vRadius));
        tY=static_cast<int>(xSetY(vAngel+90*i,vRadius));
        xdc->MoveTo(vx,vy);xdc->LineTo(tX,tY);
    }
 
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyAim::xSetPrivate(void)
{
    vAngel++;
    if((vy-vRadius<=0)&&(idPos==1))
        idPos=2;
    if((vy-vRadius<=0)&&(idPos==4))
        idPos=3;
    if((vx+vRadius>=vSizeX)&&(idPos==2))
        idPos=3;
    if((vx+vRadius>=vSizeX)&&(idPos==1))
        idPos=4;
    if((vy+vRadius>=vSizeY)&&(idPos==3))
        idPos=4;
    if((vy+vRadius>=vSizeY)&&(idPos==2))
        idPos=1;
    if((vx-vRadius<=0)&&(idPos==4))
        idPos=1;
    if((vx-vRadius<=0)&&(idPos==3))
        idPos=2;
}
 
double CMyAim::xSetX(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vx+cos(temp)*xRadius);
}
 
double CMyAim::xSetY(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vy+sin(temp)*xRadius);
}

CMyPlanet.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
#include "cmypoint.h"
 
class CMyPlanet:public CMyPoint
{
public:
    CMyPlanet(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iRadius1,int iRadius2,int iF,int iA,int iR,int iG, int iB,CString iName);
    ~CMyPlanet();
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    double xSetX(int zA,int zR);
    double xSetY(int zA,int zR);
 
    int xA,xF;
    int PosPlanetX,PosPlanetY;
    int vRadius1,vRadius2;
    CString vName;
};

CMyPlanet.cpp:
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "math.h"
 
#include "CMyPlanet.h"
#include "CMyPoint.h"
#include "XConst.h"
 
CMyPlanet::CMyPlanet(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iRadius1,int iRadius2,int iF,int iA,int iR,int iG, int iB,CString iName):
    CMyPoint(iType,iPos,iColor,iMaxX,iMaxY,iLimit,ix,iy,iR,iG,iB)
{
    xF=iF;
    xA=iA;
    vRadius1=iRadius1;
    vRadius2=iRadius2;
    vName=iName;
}
 
CMyPlanet::~CMyPlanet()
{}
 
void CMyPlanet::Show(CDC *xdc)
{
    //Сохраняем цвета, кисть и карандаш
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    //Делаем новые
    CBrush bPlanet(RGB(vR,vG,vB));
    CPen pOrbit(PS_DASH,1,cPlanetOrbit);
    CPen pPlanet(PS_SOLID,2,cPlanetBorder);
 
    //FFF
    CPen *CT=new CPen(PS_DASH,1,cPlanetOrbit);
    
    //координаты центра планеты
    PosPlanetX=static_cast<int>(xSetX(xA,vRadius1));
    PosPlanetY=static_cast<int>(xSetY(xA,vRadius1));
        
    xdc->SelectStockObject(NULL_BRUSH);
 
    //Рисуем орбиту планеты
    xdc->SelectObject(pOrbit);
    xdc->Ellipse(vx-vRadius1,vy-vRadius1,vx+vRadius1,vy+vRadius1);
 
    //Рисуем планету
    xdc->SelectObject(pPlanet);
    xdc->SelectObject(bPlanet);
    xdc->Ellipse(PosPlanetX-vRadius2,PosPlanetY-vRadius2,PosPlanetX+vRadius2,PosPlanetY+vRadius2);
 
    //Название планеты
    xdc->SetBkColor(cMainTextBack);
    xdc->SetTextColor(cMainTextFront);
    xdc->TextOut(PosPlanetX,PosPlanetY,vName);
        
    //Восстанавливаем цвета, кисть и карандаш
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyPlanet::Hide(CDC *xdc)
{
    
    //Сохраняем цвета, кисть и карандаш
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
    
    //Делаем новые
    CPen pErase(PS_SOLID,2,cSpace);
    CBrush bErase(cSpace);
 
    //Стираем планеты
    xdc->SelectObject(pErase);
    xdc->SelectObject(bErase);
    xdc->Ellipse(PosPlanetX-vRadius2,PosPlanetY-vRadius2,PosPlanetX+vRadius2,PosPlanetY+vRadius2);
 
    //Стираем название планеты
    xdc->SetTextColor(cSpace);
    xdc->SetBkColor(cSpace);
    xdc->TextOut(PosPlanetX,PosPlanetY,vName);
 
    //Восстанавливаем цвета, кисть и карандаш
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyPlanet::xSetPrivate()
{
    xA+=xF;
}
 
double CMyPlanet::xSetX(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vx+cos(temp)*xRadius);
}
 
double CMyPlanet::xSetY(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vy+sin(temp)*xRadius);
}


P.S. Простите за простыни кода и стиль написания. Я новичок

Добавлено через 14 минут
XStruct.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include "afxwin.h"
#include "CMyPoint.h"
 
struct MyStruct
{
    int sPosX;
    int sPosY;
    int sDist;
    int sHitCount;
    int f;
    int fX,fY,fDist,fAim;
    CString sName;
 
    CMyPoint *ptr;
};


XConst.h:
Кликните здесь для просмотра всего текста
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
#include "afxwin.h"
#include "XStruct.h"
 
/*
extern struct FF
{
    int zPosX;
    int zPosY;
    int zDistance;
    int zHitCount;
    CString zName;
} f_f;
*/
 
extern MyStruct TargetPos[7];
 
extern int zStar,zBigStar,zFlyStar,zPlanet;
 
extern int zPlanetRadius;
extern int zPulsarDist;
 
extern int WinPosX,WinPosY,WinSizeX,WinSizeY;
 
extern int gDrawHeight,gStatHeight,gWidth;
extern int gBorder;
extern int gDistText;
 
extern COLORREF cSpace,cStatPen,cStatBrush;
extern COLORREF cHighValue,cMiddleValue,cLowValue;
extern COLORREF cBackTextActive,cBackTextInActive;
extern COLORREF cMainTextFront,cMainTextBack;
extern COLORREF cAimOut,cAimIn;
extern COLORREF cPlanetOrbit,cPlanetBorder;


XConst.cpp:
Кликните здесь для просмотра всего текста
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
#include "XConst.h"
#include "XStruct.h"
 
//Максимум объектов
int zStar=1000;
int zFlyStar=400;
int zBigStar=50;
int zPlanet=6;
 
//Объекты
int zPlanetRadius=25;
int zPulsarDist=80;
 
 
MyStruct TargetPos[7];
 
//Геометрия основного окна
int WinPosX=150;
int WinPosY=150;
int WinSizeX=1100;
int WinSizeY=1000;
 
int gStatHeight=110;
int gDrawHeight=0;
int gWidth=0;
int gBorder=5;
 
int gDistText=17;
 
COLORREF cSpace=RGB(6,38,77);
 
COLORREF cStatPen=RGB(178,34,34);
COLORREF cStatBrush=RGB(26,58,97);
 
COLORREF cBackTextInActive=RGB(20,20,20);
COLORREF cBackTextActive=RGB(160,160,160);
COLORREF cHighValue=RGB(255,0,0);
COLORREF cMiddleValue=RGB(255,255,255);
COLORREF cLowValue=RGB(0,255,0);
 
COLORREF cMainTextFront=(RGB(0,0,0));
COLORREF cMainTextBack=(RGB(255,255,255));
 
COLORREF cAimOut=RGB(255,255,0);
COLORREF cAimIn=RGB(255,0,0);
 
COLORREF cPlanetOrbit=RGB(70,70,70);
COLORREF cPlanetBorder=RGB(155,0,155);


Добавлено через 20 часов 20 минут
Главный "таракан" нашелся. Ошибка была в блоке CMyPlanet.cpp в 32 строчке
C++
1
CPen *CT=new CPen(PS_DASH,1,cPlanetOrbit);
Был New, а вот delete потерялось. Исправил, все стало удовлетворительно.
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
13.11.2013, 21:58 #4
Без всякого юмора и подъ.бок. Отличное, на грани возможностей, изложение проблемы.
Грамотный показ проекта, через "плюсики"
Самостоятельное нахождение "таракана", и, что еще важнее, извещение о том, что "таракан" пойман.

Не по теме:

SwanSONG, вы думаете, вам не помогли? Помогли, да еще как! вам дали возможность изложить проблему (а это одна из полезных функций нашего форума). И в процессе изложения вы сами допетрили.
Есть такой способ вылезания из тупиков. Берешь за глотку человека, который совершенно не в теме, и рассказываешь ему, в какой ты ж. сейчас живешь. Стараешься так сказать, чтоб ему хоть что-то было понятно. И становишься как-бы над миром своих проблем. И вдруг видишь - все так просто! Это относится не только к программированию...

Так держать!
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
14.11.2013, 00:31  [ТС] #5
Боясь испортить ваши добрые слова...
С утечкой ресурсов справился. Правда, при выполнении кода "влоб" (без совместимости с Windows 7) зависание (секунд через 20) таки имеет место быть, но я это списываю на комбинацию Windows 8.1 x64 и 12 студии. Если выполнять в режиме совместимости, то в диспетчере задач все равно имеем "программа не отвечает", но код выполняется нормально, что, учитывая 2500 объектов, крутящихся в цикле, удовлетворительно. Выставил в Platform toolset совместимость с XP, на виртуальной машине тоже все хорошо (правда, тормозит).

Утром поставил на второй раздел винта семерку, 10 студию, пересобрал проект и запустил(ся). Все заработало без какой-либо совместимости (правда с "программа не отвечает").

Теперь очень хочу получить помощь знающих. Я так догадываюсь, что "программа не отвечает" - следствие бесконечного цикла While(1) {}. Можно ли каким-либо образом "оживить" программу? То есть, к примеру, вывести кнопку, по нажатию на которую карусель останавливалась бы. Появилась мысль "засунуть" всю графическую часть в отдельные потоки, но т.к. вопрос для меня АБСОЛЮТНО нов, боюсь, что не осилю.
Буду благодарен за наводки и идеи.
P.S. Если какие-нибудь претензии к самому коду? Одно дело, что он работает, а другое - общий стиль и философия программирования...
Байт
Эксперт C
15996 / 10264 / 1537
Регистрация: 24.12.2010
Сообщений: 19,359
14.11.2013, 01:01 #6
SwanSONG, я и сам в этом плаваю. Будучи "процедурным" программистом, в последнее время вынуждено разбираюсь потихоньку с этими штуками. Так что это не рекомендации какие-то, так - наводки
Цитата Сообщение от SwanSONG Посмотреть сообщение
Я так догадываюсь, что "программа не отвечает" - следствие бесконечного цикла While(1) {}.
Правильная догадка. В цикл обработки сообщений ничего не попадает. Надо вставлять в ваш цикл что-то вроде PostMessage.
Цитата Сообщение от SwanSONG Посмотреть сообщение
Появилась мысль "засунуть" всю графическую часть в отдельные потоки
И тут вы правы. Видимо, с вашей задачей тут никуда не денешься. Придется или осиливать, (а это только с виду так страшно) или поставить на задаче жирный крест.
ЗЫ. А вот вы не хотите посмотреть в сторону Qt? Там эти вещи довольно логично построены. Только вчера в этом убедился. Понимаю прекрасно, что переходить в новую библиотеку, новую парадигму очень не просто. Но, ИМХО, для меня лично это имело смысл. Поймите правильно. Это не оплаченная кутешниками реклама, это мое открытие мира, мне симпатичного.
Удачи!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 01:01
Привет! Вот еще темы с ответами:

временная остановка)))) - C++
меня интересует такой вопрос: в Си есть какая-нибудь функция, которая останавливает выполнение программы на некоторое время??? (например,...

Остановка действий - C++
Можно ли как нибудь остановить выполнения программы на некоторое время?

Полная остановка программы - C++
Здравствуйте, подскажите как в c++ можно плностью остановить и выключить программу, что-бы часть кода не выполнялось.

Остановка после cin - C++
здравствуйте, начал изучение C++, скачал visual С++ 2010 и сразу же столкнулся с проблемой. заключается она в том что есть такой код: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.11.2013, 01:01
Ответ Создать тему
Опции темы

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