Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426

Зависание приложения

15.09.2013, 11:40. Показов 2181. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Возникла необходимость написать упрявляющюю программу, через протокол IRC
В рунете нашел кусочек кода от бота немного его перестроил под себя но возникла проблема, данный код идеально работал в консольном приложении, но в виндус форм почему то после нажатия кнопки, которая запускает процесс, программа перестает реагировать, мало того дак еще параллельно с ней перестает работать и гугл хром, то есть на попытки перетащить окно закрыть свернуть и тп оно просто как бы залипает на 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
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Poxy
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        NetworkStream stream;
        TcpClient irc;
        StreamReader reader;
        StreamWriter writer;
 
        private void button1_Click(object sender, EventArgs e)
        {
            Variable.Server = textBox1.Text;
            Variable.Port = textBox3.Text;
            Variable.Chanel = textBox2.Text;
            Variable.Nick = "zX";
            Variable.Name = "fdgggssdfsf";
            Connect();
 
            Works();
        }
 
 
        private TcpClient IRCConnection = null;
        private NetworkStream ns = null;
        private StreamReader sr = null;
        private StreamWriter sw = null;
 
        public void Connect()
        {
            try
            {
                IRCConnection = new TcpClient(Variable.Server, Convert.ToInt16(Variable.Port));
            }
            catch
            {
                richTextBox1.Text += "Connection Error" + "\r\n";
                throw;
            }
 
            try
            {
                ns = IRCConnection.GetStream();
                sr = new StreamReader(ns);
                sw = new StreamWriter(ns);
            }
            catch
            {
                richTextBox1.Text += "Communication error" + "\r\n";
                throw;
            }
        }
        public void sendData(string cmd, string param)
        {
            if (param == null)
            {
                sw.WriteLine(cmd);
                sw.Flush();
                richTextBox1.Text += cmd + "\r\n";
            }
            else
            {
                sw.WriteLine(cmd + " " + param);
                sw.Flush();
                richTextBox1.Text += cmd + "\r\n";
            }
        }
        public void Dispose()
        {
            if (sr != null)
                sr.Close();
            if (sw != null)
                sw.Close();
            if (ns != null)
                ns.Close();
            if (IRCConnection != null)
                IRCConnection.Close();
        }
        public void Works()
        {
            string[] ex;
            string data;
            bool shouldRun = true;
 
            int ew = 0;
 
            while (shouldRun)
            {
                data = sr.ReadLine();
                ew += 1;
                if (ew == 2)
                {
                    sendData("USER", Variable.Nick + " 3 * :" + Variable.Name);
                    sendData("NICK", Variable.Nick);
                }
 
 
 
                if (data == null)
                {
                    richTextBox1.Text += "Conntection failed.\r\n" + "\r\n";
                    Thread.Sleep(5000);
                    richTextBox1.Text += "Reconnect" + "\r\n";
                    Connect();
                }
                else
                {
                    Console.WriteLine(data);
                    char[] charSeparator = new char[] { ' ' };
 
                    ex = data.Split(charSeparator, 5);
 
                    try
                    {
                        if (ex[0] == "PING") { sendData("PONG", ex[1]); }
                        if (ex[1] == "422") { sendData("JOIN", Variable.Chanel); }
                        if (ex[1] == "433")
                        {
                            Variable.id += 1;
                            sendData("NICK", Variable.Nick + Variable.id);
                        }
                    }
                    catch { }
 
                    if (ex.Length > 4)
                    {
                        string command = ex[3];
 
                        string uy = "5";
                        string oi = "4";
 
                        switch (command)
                        {
                            //case ":!@ddos":
                            //    a1(ex[4]);
                            //    break;
 
                            //case ":!@file_open":
                            //    openFile(ex[4]);
                            //    break;
 
                            //case ":!@file_loading":
                            //    dload(ex[4]);
                            //    break;
 
                            case ":!@join":
                                sendData("JOIN", ex[4]);
                                break;
 
                            case ":!@say":
                                sendData("PRIVMSG", ex[2] + " " + ex[4]);
                                uy = uy + oi;
                                Console.WriteLine(uy);
                                break;
 
                            case ":!@quit":
                                sendData("QUIT", ex[4]);
                                shouldRun = false;
                                break;
                        }
                    }
                }
 
 
            }
        }
    }
}
Подскажите как исправить эти залипания?!

Добавлено через 6 минут
При всем при этом сам код отрабатывает нормально на канал заходит и отображает ник zH

Добавлено через 10 часов 7 минут
Может надо что то изменить в цикле while (shouldRun)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2013, 11:40
Ответы с готовыми решениями:

Зависание приложения при подключении другого приложения к нему
Написал сервер и клиент на консоли, все работает. На windows forms появляется проблема. private void bttnBeginConnection_Click(object...

Зависание приложения при работе приложения
Всем привет ребят. Подскажите, пожалуйста, имею в форме кнопку, при нажатии которой начинает работать функция, и приложение полностью...

Зависание оконного приложения при прослушке порта
private void button1_Click(object sender, EventArgs e) { TcpListener listner = new TcpListener(new...

22
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
15.09.2013, 15:30
попробуйте поставить брейкпоинт в case ":!@quit":

проблема может быть в том, что программа туда не попадает и висит в бесконечном цикле. если это так, ищите причину. если это не так, то копайте еще. не могу проверить Ваш код, так как не хватает данных:

не определено Variable
нет имени сервера, порта и тд
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
15.09.2013, 18:55  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
не определено Variable
нет имени сервера, порта и тд
Variable
C#
1
2
3
4
5
6
7
8
9
    class Variable
    {
        public static string Server;//185.20.226.125
        public static string Port;//6667
        public static string Nick;//zH
        public static string Name;//pff
        public static string Chanel;//#testos
        public static int id;// если ник уже используется к нику прибавляется данное значение
    }
Добавлено через 9 минут
Он по факту появляется на сервере на команды реагирует но если ему послать !@quit ничего не происходит в принципе он должен отключаться но все равно остается в сети.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
15.09.2013, 19:14
раз:

C#
1
2
3
4
5
6
7
8
9
10
11
            try
            {
                IRCConnection = new TcpClient(Variable.Server, Convert.ToInt16(Variable.Port));
                IRCConnection.ReceiveTimeout = 1000;
            }
            catch
            {
                richTextBox1.Text += "Connection Error" + "\r\n";
                Refresh();
                throw;
            }
два:

C#
1
2
3
4
5
6
7
8
                try
                {
                    data = sr.ReadLine();
                }
                catch (Exception e)
                {
                    richTextBox1.Text += e.Message + "\n\r";
                }
три: везде по тексту замените console.writeline на richtextbox.text +=

четыре: запускайте процесс асинхронно, и тогда зависать будет только поток чтения/записи, а не все приложение полностью
1
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
15.09.2013, 19:39  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
четыре: запускайте процесс асинхронно, и тогда зависать будет только поток чтения/записи, а не все приложение полностью
Можете пояснить как а то я нуп еще не в курсе.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
15.09.2013, 20:02
System.Threading.Thread.Start(new ThreadStart(this.Works));
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
16.09.2013, 11:53  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
System.Threading.Thread.Start(new ThreadStart(this.Works));
А как это применить?
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
16.09.2013, 12:45
вставьте эту строку вместо works();

но будьте готовы к тому, что посыпятся ошибки: из других потоков нельзя управлять визуальными параметрами приложения. используйте конструкцию if (InvokeRequired) Invoke(<параметры); else <метод>;

за более детальными инструкциями или описаниями обращайтесь в msdn (ищите InvokeRequired или Thread.Start)
1
 Аватар для Монфрид
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,247
16.09.2013, 12:49
у вас выполняются операции, которые подвешивают всю форму, и форма ждёт выполнения этих операций. Такие операции нужно выделять в отдельные потоки, тогда не будет никаких тормозов
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
17.09.2013, 00:11  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
но будьте готовы к тому, что посыпятся ошибки: из других потоков нельзя управлять визуальными параметрами приложения. используйте конструкцию if (InvokeRequired) Invoke(<параметры); else <метод>;
Вообщем пошел я в интернет по вашему совету и нашел то что мне нужно реализовал путем
C#
1
2
3
4
5
6
7
8
9
10
11
        private void button1_Click(object sender, EventArgs e)
        {
            Variable.Server = textBox1.Text;
            Variable.Port = textBox3.Text;
            Variable.Chanel = textBox2.Text;
            Variable.Nick = "zX";
            Variable.Name = "fdgggssdfsf";
            Connect();
            Thread mt = new Thread(Works);
            mt.Start();
        }
И каждый richTextBox1.Text сделал так
C#
1
this.BeginInvoke(new Action(delegate {  richTextBox1.Text += "Communication error" + "\r\n";}));
Добавлено через 28 минут
И кстати почему то после соединения в текстовом контейнере много повторяющихся строк
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:relax-craft.ru 254 zX 1 :channels formed
:zX MODE zX :+iwx
:zX MODE zX :+iwx
:zX MODE zX :+iwx
:zX MODE zX :+iwx
JOIN
:zX MODE zX :+iwx
:relax-craft.ru 366 zX #testos :End of /NAMES list.
:relax-craft.ru 366 zX #testos :End of /NAMES list.
:relax-craft.ru 366 zX #testos :End of /NAMES list.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
17.09.2013, 10:06
Цитата Сообщение от stels009 Посмотреть сообщение
И кстати почему то после соединения в текстовом контейнере много повторяющихся строк
тут уже не могу помочь = ) ищите ошибку в протоколе обмена (если это ошибка)
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
18.09.2013, 17:22
Цитата Сообщение от stels009 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void sendData(string cmd, string param) 
{ 
if (param == null) 
{ 
sw.WriteLine(cmd); 
sw.Flush(); 
richTextBox1.Text += cmd + "\r\n"; 
}
else 
{ 
sw.WriteLine(cmd + " " + param); 
sw.Flush(); richTextBox1.Text += cmd + "\r\n"; 
} 
}
у вас этот метод выполняется в Work() черт знает сколько раз, и на каждое выполнение идёт запись в rtb. курить надо в эту сторону, я думаю
0
 Аватар для MrGladus
178 / 178 / 50
Регистрация: 06.01.2013
Сообщений: 392
18.09.2013, 18:19
Покажите еще раз уже исправленный вами код
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
18.09.2013, 21:59  [ТС]
Цитата Сообщение от MrGladus Посмотреть сообщение
Покажите еще раз уже исправленный вами код
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
    public partial class Form1 : Form
    {
        #region Переменные
        private TcpClient IRCConnection = null;
        private NetworkStream ns = null;
        private StreamReader sr = null;
        private StreamWriter sw = null;
        delegate void valDel(string value);
#endregion
 
        #region Визуалка
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }        
        private void button1_Click(object sender, EventArgs e)
        {
            Variable.Server = textBox1.Text;
            Variable.Port = textBox3.Text;
            Variable.Chanel = textBox2.Text;
            Variable.Nick = "zX";
            Variable.Name = "fdgggssdfsf";
            Connect();
            Thread mt = new Thread(Works);
            mt.Start();
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string s = textBox4.Text;
            sendData(s, null);
        }
        private void textBox4_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                button2.PerformClick();
            }
        }
#endregion
 
        #region Конструктор
        public void Connect()
        {
            try
            {
                IRCConnection = new TcpClient(Variable.Server, Convert.ToInt16(Variable.Port));
                IRCConnection.ReceiveTimeout = 1000;
            }
            catch
            {
                this.BeginInvoke(new Action(delegate { richTextBox1.Text += "Connection Error" + "\r\n"; }));
                Refresh();
                throw;
            }
 
            try
            {
                ns = IRCConnection.GetStream();
                sr = new StreamReader(ns);
                sw = new StreamWriter(ns);
            }
            catch
            {
               this.BeginInvoke(new Action(delegate {  richTextBox1.Text += "Communication error" + "\r\n";}));
                throw;
            }
        }
        public void sendData(string cmd, string param)
        {
            if (param == null)
            {
                sw.WriteLine(cmd);
                sw.Flush();
               this.BeginInvoke(new Action(delegate {  richTextBox1.Text += cmd + "\r\n";}));
            }
            else
            {
                sw.WriteLine(cmd + " " + param);
                sw.Flush();
               this.BeginInvoke(new Action(delegate {  richTextBox1.Text += cmd + "\r\n";}));
            }
        }
        public void Dispose()
        {
            if (sr != null)
                sr.Close();
            if (sw != null)
                sw.Close();
            if (ns != null)
                ns.Close();
            if (IRCConnection != null)
                IRCConnection.Close();
        }
        public void Works()
        {
            string[] ex;
            string data;
            bool shouldRun = true;
 
            int ew = 0;
 
            while (shouldRun)
            {
                try
                {
                    data = sr.ReadLine();
                    ew += 1;
                    if (ew == 2)
                    {
                        sendData("USER", Variable.Nick + " 3 * :" + Variable.Name);
                        sendData("NICK", Variable.Nick);
                    }
 
                    if (data == null)
                    {
                       this.BeginInvoke(new Action(delegate {  richTextBox1.Text += "Conntection failed.\r\n" + "\r\n";}));
                        Thread.Sleep(5000);
                       this.BeginInvoke(new Action(delegate {  richTextBox1.Text += "Reconnect" + "\r\n";}));
                        Connect();
                    }
                    else
                    {
                        this.BeginInvoke(new Action(delegate { richTextBox1.Text += data + "\r\n"; }));
                        char[] charSeparator = new char[] { ' ' };
 
                        ex = data.Split(charSeparator, 5);
                        
                        try
                        {
                       //     this.BeginInvoke(new Action(delegate { richTextBox1.Text += ex[0] + " " + ex[1] + " " + ex[2] + " " + ex[3] + "\r\n"; }));
                            if (ex[0] == "PING") { sendData("PONG", ex[1]); }
                            if (ex[1] == "422") { sendData("JOIN", Variable.Chanel); }
                            if (ex[1] == "433") { Variable.id += 1; sendData("NICK", Variable.Nick + Variable.id);
                            }
                        }
                        catch { }
 
                        if (ex.Length > 4)
                        {
                            string command = ex[3];
 
                            string uy = "5";
                            string oi = "4";
 
                            switch (command)
                            {
                                //case ":!@ddos":
                                //    a1(ex[4]);
                                //    break;
 
                                //case ":!@file_open":
                                //    openFile(ex[4]);
                                //    break;
 
                                //case ":!@file_loading":
                                //    dload(ex[4]);
                                //    break;
 
                                case ":!@join":
                                    sendData("JOIN", ex[4]);
                                    break;
 
                                case ":!@say":
                                    sendData("PRIVMSG", ex[2] + " " + ex[4]);
                                    uy = uy + oi;
                                    this.BeginInvoke(new Action(delegate { richTextBox1.Text += uy + "\r\n";}));
                                    break;
 
                                case ":!@quit":
                                    sendData("QUIT", ex[4]);
                                    shouldRun = false;
                                    Dispose();
                                    break;
                            }
                        }
                    }
 
                }
                catch//(Exception e)
                {
                  //  this.BeginInvoke(new Action(delegate { richTextBox1.Text += e.Message + "\r\n"; }));
                 //   richTextBox1.Text += e.Message + "\r\n";
                }
 
 
            }
        }
#endregion
    }
Вот

Добавлено через 5 минут
Цитата Сообщение от Spectral-Owl Посмотреть сообщение
у вас этот метод выполняется в Work() черт знает сколько раз, и на каждое выполнение идёт запись в rtb.
Данная функция отвечает за отправку сообщений серверу, она к этому ну никак не может быть причастна, так как вопрос состоит в приеме данных, а не отправке.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
18.09.2013, 22:43
я так понимаю, что все, попавшее в textbox, приходит от сервера через sr.readline
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
18.09.2013, 22:47  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
я так понимаю, что все, попавшее в textbox, приходит от сервера через sr.readline
Да в richTextBox1 должно выходить все что идет с сервера.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
18.09.2013, 23:28
попробуйте добавить туда еще и send-репорты. может, картина прояснится
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
18.09.2013, 23:47  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
попробуйте добавить туда еще и send-репорты. может, картина прояснится
А по конкретнее.

Добавлено через 5 минут
Там еще дело в том что он выводит многократно последнюю строку повторяя ее вместо пред идущих то есть например послать команду lusers он должен выдать что то вроде
[23:45:37] There are 0 users and 1 invisible on 1 servers
[23:45:37] I have 1 clients and 0 servers
[23:45:37] 1 2 Current local users 1, max 2
[23:45:37] 1 2 Current global users 1, max 2
а выдает
:relax-craft.ru 266 zX 2 2 :Current global users 2, max 2
:relax-craft.ru 266 zX 2 2 :Current global users 2, max 2
:relax-craft.ru 266 zX 2 2 :Current global users 2, max 2
:relax-craft.ru 266 zX 2 2 :Current global users 2, max 2
:relax-craft.ru 266 zX 2 2 :Current global users 2, max 2
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
18.09.2013, 23:49
вы уверены, что проблема не в сервере? что он получил, то в тб и закинул. магии тут никакой. или, может, серверу нужно отправлять квитанции о получении, иначе сервер продолжает спамить одни и те же строки?
0
 Аватар для stels009
16 / 15 / 1
Регистрация: 05.04.2011
Сообщений: 426
18.09.2013, 23:55  [ТС]
Цитата Сообщение от sezada Посмотреть сообщение
серверу нужно отправлять квитанции о получении, иначе сервер продолжает спамить одни и те же строки?
Может так оно и есть но, я не в курсе как это делать irc я только только начал изучать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2013, 23:55
Помогаю со студенческими работами здесь

Зависание приложения
Опишу проблему как можно понятнее и короче! Есть многопоточное приложение, не кроссплатформенное - only for Linux. Есть подозрение, что со...

Зависание приложения
Очень часто бывает что приложение зависает но не сам комп и конечно в этом случае надо открыть диспетчер задач что собственно говоря я и...

Зависание картинки в приложения на Windows 7
Здравствуйте, возникла следующая проблема: происходит зависание картинки в приложениях, то есть оно работает, но какие либо изменения не...

Автозапуск приложения вызывает зависание сервера (
Странная ситуация. Тему ниже https://www.cyberforum.ru/linux/thread1730550.html читал. Но у меня другая проблема. Мне нужно при запуске...

Зависание приложения при работе с TThread
после нажатия кнопки выводится несколько строк в Memo1, после чего приложение зависает. Почему так происходит? unit Unit1; interface...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru