Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449

Как создать отдельный поток ?

02.05.2013, 12:02. Показов 3859. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет
Как вызвать функцию WriteBlockSe в новом потоке, а то форма тормозит.

Заранее спасибо

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
        public void WriteBlockSe(string[,] DataWrite, int Sektors)
        {
            try
            {
                byte[] ByteData = new byte[512];
                int Counter = 0;
                for (int Row = 0; Row < 32; Row++)
                {
                    string Data = "";
                    int PositCow = 0;
                    for (int Cow = 0; Cow < 16; Cow++)
                    {
                        Data = "";
                        int Posit = 0;
                        for (Posit = 0; Posit <= 7; Posit++)
                        {
                            Data = Data + DataWrite[Row, PositCow + Posit];
                        }
                        PositCow = PositCow + Posit;
                        ByteData[Counter] = Convert.ToByte(Convert.ToInt32(Data, 2));
                        Counter++;
                    }
                }
                WritesByte(ByteData, Sektors);
                StatusOpen = "OK WriteBlock";
            }
            catch
            {
                StatusOpen = "Erroe WriteBlock";
            }
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2013, 12:02
Ответы с готовыми решениями:

Как закинуть нужные расчеты в отдельный поток
Вообщем считаю что так и должно быть так как она читает\читает\читает. //все норм и с памятью и с алгоритмом Как сделать что бы...

Как вынести обработчик глобального хука в отдельный поток?
Доброе время суток, уважаемые форумчане! Я делаю глобальный хук, с помощью класса, и хочу вынести обработчик в новый поток но у меня не...

Прокси-сервер: как вывести некоторые операции в отдельный поток
Собственно у меня прокси сервер получает пакет и обрабатывает, но пока он обрабатывает - другие не могут пройти, нужно обработку вынести в...

40
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.05.2013, 21:48
Студворк — интернет-сервис помощи студентам
sasha0192, потому что все потоки загруженны. Зато работа гораздо быстрее проходит
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
03.05.2013, 22:03  [ТС]
Странную штуку заметил, почему то запись не стабильно... пропускает сектора.

А то вообще островками (местами пропуски) пишет... пытаюсь 512000 байт записать...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.05.2013, 22:14
sasha0192, попробуйте параллельность убрать. Может в ней проблема. Хотя не должно быть.
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
03.05.2013, 22:20  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
попробуйте параллельность убрать. Может в ней проблема. Хотя не должно быть.
Пробовал не получилось...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.05.2013, 22:22
sasha0192, не знаю, никогда подобной ерундой не занимался
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
03.05.2013, 22:40  [ТС]
Странно убрал это ->
C#
1
2
3
4
            //Тут основная работа
            var bw = new BackgroundWorker();
            bw.DoWork += (s, e) => WriteBlocks(DataWrite, Sektors);
            bw.RunWorkerAsync();
И перестал пропускать... может глюк ?

Добавлено через 9 минут
буду разбираться
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.05.2013, 23:07
sasha0192, можете просто сделать Thread.Start, вместо воркера. Вам же не надо результаты в форму совать. А значит достаточно создать тред

Добавлено через 8 минут
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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace ConsoleApplication43
{
    class Program
    {
        static void Main(string[] args)
        {
            var t = new Thread(Foo);
            t.Start();
            Console.WriteLine("Thread stated");
            t.Join();
            Console.WriteLine("Program ended");
            Console.ReadKey();
        }
 
        static void Foo()
        {
            var f = new FileStream("C:\\123456010.txt", FileMode.Create);
            f.Close();
            Parallel.For(0, 100, i =>
                {
                    var fs = new FileStream("C:\\123456010.txt", FileMode.Open, FileAccess.Write, FileShare.Write);
                    fs.Position = i;
                    fs.WriteByte((byte) i);
                });
            Console.WriteLine("Thread ended");
        }
    }
}
Главное - у каждого потока должен быть свой filestream иначе они будут друг другу мешать.
1
 Аватар для Lasur
267 / 257 / 43
Регистрация: 18.03.2012
Сообщений: 506
04.05.2013, 04:48
Psilon, разбиение процесса записи на потоки бессмысленно, так как жесткий диск все равно работает последовательно. Вы лишь замедляете процесс, теряя время на лишние скачки записывающей головки и на смену контекста потока.
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
04.05.2013, 06:35
Мдя... тяжелый случай, а вас никто не учил логическим операциям и упаковкам бит в байты? говорят помогает в таких случаях

Добавлено через 12 минут
если я правельно понял логику преведенного куска то вот решение
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
        public void WriteBlockSe(string[,] DataWrite, int Sektors)
        {
            int counterBytes = 0;
            byte[] ByteData = new byte[512];
            for (int i = 0; i < DataWrite.GetLength(0); i++)
                for (int j = 0; j < DataWrite.GetLength(1); j += 8)
                {
                    for (int k = 0; k < 8; k++)
                        ByteData[counterBytes] |= Convert.ToByte(Convert.ToByte(DataWrite[i, j * 8 + k]) << k);
                    counterBytes++;
                }
            string result = WritBytes(ByteData);
        }
 
        public string WritBytes(byte[] data)
        {
            string result = "Ok WriteBlock";
            try
            {
                //асинхронная запись байт в результирующие устройство
            }
            catch (Exception exception)
            {
                result = exception.ToString();
            }
            return result;
        }
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.05.2013, 12:28
Lasur, человек пишет на флешку, с чего бы там замедляться при. Случайном доступе?
агерон, можно со сдвигами, я делал так, чтобы автор понимал. Ведь можно еще проще

Добавлено через 13 минут
агерон, для "оптимизаторов" и любителей возиться с битами в угодну производительности можно еще короче же записать!
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
using System;
 
namespace ConsoleApplication41
{
    class Program
    {
        static void Main()
        {
            string s = "10101010101010101010101010101010";
            byte[] res = ConvertToByteArray(s);
            foreach (byte b in res)
                Console.WriteLine(b);
            Console.ReadKey();
        }
 
        private static byte[] ConvertToByteArray(string s)
        {
            const int bitsInByte = 8;
            byte[] res = new byte[s.Length / bitsInByte];
            for (int i = 0; i < res.Length; i++)
                for (int j = bitsInByte - 1, k = i << 3; j >= 0; j--, k++)
                    res[i] |= (byte) ((s[k] - '0') << j);
            return res;
        }
    }
}
Добавлено через 3 минуты
C#
1
string result = WritBytes(ByteData);
глотать исключения - тоже гениальное решение
1
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
04.05.2013, 14:02  [ТС]
Psilon, это пример быстрее работает я его немного переделал на двумерный массив
Правильно хоть ?
32 раза получаю 16 байт = 512 то что надо

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                byte[] ByteData = new byte[512];
                int Counter = 0;
                for (int Row = 0; Row < 32; Row++)
                {
                    const int bitsInByte = 8;
 
                    var sb = new StringBuilder(bitsInByte, bitsInByte);
 
                    for (int i = 0, k = 0; i < 128; k++)
                    {
                        for (int j = 0; j < bitsInByte; j++, i++)
                        {
                            sb.Append(DataWrite[Row, 0][i]);
                        }
                        ByteData[Counter] = Convert.ToByte(sb.ToString(), 2);
                        sb.Clear();
                        sb.Capacity = bitsInByte;
                        Counter++;
                    }
                }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.05.2013, 14:07
sasha0192, а нельзя в другом методе сначала преобразщовать двумерный массив в одномерный, а потом скармливать процедуре (причем желательно последнему варианту) одномерный массив? Нет, если вам так нравится хреначить кучу кода с волшебными константами и без подпрограмм, то ваше дело, просто я буду знать, что не надо заходить в этот топик.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
04.05.2013, 14:13
и где ты тут увидал глотание исключения? хорошо если тебе нужна ПОЛНАЯ ИНФОРМАЦИЯ об исключении (ну мало ли может StackTrace тебя не удовлетворяет) тогда сделаем замену 1 строчки
C#
1
2
3
4
5
6
7
8
9
10
11
12
public string WritBytes(byte[] data)
{
    try
    {
        //асинхронная запись байт в результирующие устройство
    }
    catch (Exception exception)
    {
    throw exception
    }
    return "Ok WriteBlock";
}
0) если TC не знает что такое битовые операции брысь за учебники учиться, теорию читать
1) на счет насмешки над оптимизацией производительности... Linq2Sql хорошая технология не спорю, но вот стоит только сделать пару десятков тысяч раз вызовов более менее сложных выражений Linq2Sql,к томуже вложеных в 1 или 2 цикла ну чтобы сложность немного повысить, так сразу плакать хочеться, а подобных ситуаций в крупных высоконагруженых проектах бывает много,
2) мой код лучше т. к. он понятный на чтение и поток внимания при его чтении не рветься а вот у тебя как минимум 1 строчка вызывает срыв восприятия у человека только пришедшего в проект
C#
1
for (int j = bitsInByte - 1, k = i << 3; j >= 0; j--, k++)
ему нужно прилогать лишние усилия чтобы понять что здесь происходит, а если таких мест с 10 или с 100 а если с 1000? и каждое особеное требует особого подхода? человек будет выжат как лимон к концу рабочего дня... и поверь с таким твоим подходом к написанию программы он долго не продержиться в проекте, кому нравиться быть выжатым как лимон постоянно?
3) я обварачиваю в try/catch только те участки где Exception ДЕЙСТВИТЕЛЬНО МОЖЕТ произойти
Будем дальше полемику устраивать?
0
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
04.05.2013, 14:33  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
а нельзя в другом методе сначала преобразщовать двумерный массив в одномерный, а потом скармливать процедуре (причем желательно последнему варианту) одномерный массив?
2у21у12у
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.05.2013, 14:53
агерон, и как ты представляешь себе использование этого метода?
C#
1
2
3
4
5
try
{
   MessageBox.Show(WriteBytes(..));
}
catch {...}
Тогда зачем внутри try catch если исключение все равно пробрасывается дальше? Ты только весь стектрейс затираешь

Добавлено через 1 минуту
мой код лучше т. к. он понятный на чтение и поток внимания при его чтении не рветься а вот у тебя как минимум 1 строчка вызывает срыв восприятия у человека только пришедшего в проект
ну а как же, такая эффективность, вместо умножения на 8 как глупые люди делают гораздо эффективнее сделать побитовый сдвиг влево!
0
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449
04.05.2013, 14:59  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
а нельзя в другом методе сначала преобразщовать двумерный массив в одномерный, а потом скармливать процедуре (причем желательно последнему варианту) одномерный массив?
Так ?

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
        public void WriteBlock(string[,] DataWrite, int Sektors)
        {
            string One = ConvertOne(DataWrite);
 
            WriteBlockOne(One, Sektors);
        }
 
        public static string ConvertOne(string[,] DataWrite)
        {
            string One = "";
            for (int Row = 0; Row < 32; Row++)
            {
                One = One + DataWrite[Row, 0];
            }
            return One;
        }
 
        public void WriteBlockOne(string DataWrite, int Sektors)
        {
            try
            {
                const int bitsInByte = 8;
                byte[] ByteData = new byte[DataWrite.Length / bitsInByte];
                var sb = new StringBuilder(bitsInByte, bitsInByte);
                for (int i = 0, k = 0; i < DataWrite.Length; k++)
                {
                    for (int j = 0; j < bitsInByte; j++, i++)
                        sb.Append(DataWrite[i]);
                    ByteData[k] = Convert.ToByte(sb.ToString(), 2);
                    sb.Clear();
                    sb.Capacity = bitsInByte;
                }
 
                WritesByte(ByteData, Sektors);
            }
            catch
            {
                StatusOpen = "Error WriteBlock";
            }
        }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.05.2013, 15:12
sasha0192, заменить string на stringbuilder, а так да. Причем в конструкторе стрингбилдера заранее укажите его размер, вы же его знаете.

Добавлено через 3 минуты
Вообще-то я имел ввиду что-то вроде такого:
C#
1
2
3
4
5
6
7
8
9
        public static string ConvertOne(string[,] DataWrite)
        {
            int length = DataWrite.GetLength(0) * DataWrite.GetLength(1);
            var sb = new StringBuilder(length, length);
            for(int i = 0; i < DataWrite.GetLength(0); i++)
               for(int j = 0; j < DataWrite.GetLength(1); j++)   
                  sb.Append(DataWrite(i,j));      
            return sb.ToString();
        }
только вот непонятно, почему у вас массив СТРОК, потому что это получается трехмерный массив символов.

уж в чем агерон прав, так это в том, что вам книжечек стоит почитать.
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
04.05.2013, 16:54
побитовый сдвиг в лево? а ты уверен что он тут уместен? смотри а если там будет не 8 а 9? (да байты бывает и не 8 битные если ты незнал об этом), + не забываем про срыв потока внимания, а логический сдвиг вместо умножения в данном месте его нам обеспечит а насчет вот этого
C#
1
2
3
4
5
try
{
   MessageBox.Show(WriteBytes(..));
}
catch {...}
все просто , если уж пошла такая пляска
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
using System;
using CommonClasses;
using EventsLibrary;
 
namespace ConsoleApplication2
{
    public interface IResult { }
 
    public class ProgrammLogic:IEvent<IResult, string>, IEvent<IException, Exception>, IDisposable
    {
        public ProgrammLogic()
        {
            this.CreateEvent<IResult, string>();
            this.CreateEvent<IException, Exception>();
        }
 
        public byte[] CreateWriteBlock(string[,] arrayBitsForWrite)
        {
            int counterBytes = 0;
            byte[] result = new byte[512];
            int rowCount = arrayBitsForWrite.GetLength(0);
            int colCount = arrayBitsForWrite.GetLength(1);
            int countBitInByte = 8;
            for (int i = 0; i < rowCount; i++)
                for (int j = 0; j < colCount; j += countBitInByte)
                {
                    for (int k = 0; k < 8; k++)
                    {
                        int bit = Convert.ToByte(arrayBitsForWrite[i * rowCount, j * countBitInByte + k]);
                        result[counterBytes] |= Convert.ToByte(bit << k);
                    }
                    counterBytes++;
                }
            return result;
        }
 
        public void WriteBytes(byte[] arrayBytesForWrite, int numberSector)
        {
            try
            {
                //асинхронная запись байт в результирующие устройство
                this.FireEvent<IResult, string>(new EventArgs<string>("Ok WriteBlock"));
            }
            catch (Exception exception)
            {
                this.FireEvent<IException, Exception>(new EventArgs<Exception>(exception));
            }
        }
 
        public void Dispose()
        {
            this.DisposeEvent<IResult, string>();
            this.DisposeEvent<IException, Exception>();
        }
 
        Lazy<ExplicitlyEvent<IResult, string>> IEvent<IResult, string>.Event { get; set; }
        Lazy<ExplicitlyEvent<IException, Exception>> IEvent<IException, Exception>.Event { get; set; }
    }
}
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
using System;
using CommonClasses;
using EventsLibrary;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string [,] dataForWrite = new string[,] 
            {
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"},
                {"01010101","01010101"}
            };
            ProgrammLogic programmLogic = new ProgrammLogic();
            programmLogic.AddEventHandler<IResult, string>((object sender, EventArgs<string> e) => { Console.WriteLine(e.DataContainer); });
            programmLogic.AddEventHandler<IException, Exception>((object sender, EventArgs<Exception> e) => { Console.WriteLine(e.DataContainer.ToString()); });
            byte[] arrayBytesForWrite = programmLogic.CreateWriteBlock(dataForWrite);
            programmLogic.WriteBytes(arrayBytesForWrite, 0);
            Console.ReadKey();
        }
    }
}
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.05.2013, 17:25
Цитата Сообщение от агерон Посмотреть сообщение
побитовый сдвиг в лево? а ты уверен что он тут уместен? смотри а если там будет не 8 а 9? (да байты бывает и не 8 битные если ты незнал об этом), + не забываем про срыв потока внимания, а логический сдвиг вместо умножения в данном месте его нам обеспечит а насчет вот этого
знаю, что бывают, но вероятность встретить их где-то кроме асма/с == 0, значит, не бывают
По крайней мере мне на практике не встречались и вряд ли встретятся.
все просто , если уж пошла такая пляска
А в чем смысл пустого интерфейса можно узнать?
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
04.05.2013, 20:08
интерфейс - метка, по сути удобная штука, позволяет различать ленивые события реализованные через IEvent, т. к. иногда бывают несколько реализаций IEvent с одинаковыми EventArgs<>

Добавлено через 1 минуту
могу сбросить исходники если интересно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2013, 20:08
Помогаю со студенческими работами здесь

Как получить доступ к контролу через отдельный поток в кастомном классе?
Ошибка: Невозможно получить доступ к нестатическому члену внешнего типа &quot;Хурда.Form1&quot; через вложенный тип...

Почему не все ядра загружены и, как сделать так, чтобы отдельный поток подавался на отдельное ядро?
Создал 12 потоков, а как-то не все ядра загружены. Процессор i7-3930K. using System; using System.Collections.Generic; using...

Отдельный поток/процесс
Доброго времени суток! Вопрос заключается в следующем: есть COM-порт, с ним ведется работу по прослушиванию: ... настройка...

WebBrowser в отдельный поток
Всем привет! Значит есть флэш игруха на одном сайте, играть нету времени, но хочется обогнать одноклассников :) Написал я прогу которая...

Отдельный поток добавляет данные в DataGridView
Возникла нетривиальная задачка.. Имеется основной поток - приложение с DataGridView. В ходе работы порождается Thread, которой нужно...


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

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

Новые блоги и статьи
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru