Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
 Аватар для sasha0192
51 / 51 / 7
Регистрация: 23.01.2012
Сообщений: 449

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

02.05.2013, 12:02. Показов 3766. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru