Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/17: Рейтинг темы: голосов - 17, средняя оценка - 4.53
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913

Sleep и COM

21.06.2011, 08:08. Показов 3890. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Раотаю с COM портом Все нормально, посылаю дааные, принимаю. Проблема в том, что пока жду ответа от COM(по событию) в коде ставлю ThreadSleep И на время этого слипа очень бы хотелось на экране поставить какие-нибудь бегушие точки или еще что-нибудь, чтобы пользователь знал, что программа не зависла, а работает. Как это сделать, подскажите, пожалуйста! Спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2011, 08:08
Ответы с готовыми решениями:

Sleep
Пишу пакмэна , нужно что бы пакмен бегал быстрее чем приведение как это сделать?? пробовал написать так но работает все с одной...

Sleep()
Как сделать штоб после вывода информации консольное окно не исчезло. Я делал через Sleep() #include <iostream.h> #include...

sleep()
подскажите, если в QT 4.7.2 аналог sleep() ? кроссовый нужен. что то гугловые методы не помогли. в QThread все sleep'ы и wait'ы...

29
Заблокирован
21.06.2011, 13:27
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от iva_a Посмотреть сообщение
Мне надо, чтобы вся работа с портом была в BackgroundWorker? Так?
да.
ошибка по всей видимости, потому, что ProgressBar.Maximum переполняется, поставьте тоже 240, как в цикле

Не по теме:

у меня маленький опыт работы с BackgroundWorker, в свое время от них отказазся, т.к. мне их нужно было много, а пул потоков много долго создает, так что и сам не все могу учесть

0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
21.06.2011, 14:05  [ТС]
Dzhej-Dzhej
Да, поменяла маx, у вас ошибок нет. Спасибо!А я все равно не понимаю. Если кнопка but - это как бы ивент из моего класса SerialPortTest, то получается, что событии этого класса я должна вызывать BackgroundWorker? Мен же вроде надо наоборот в BackgroundWorker положить класс SerialPortTest? Совсем запуталась
0
Заблокирован
21.06.2011, 14:16
я создаю в конструкторе формы или в клике на кнопке фоновый поток, в нем создаю экземпляр класса и с помощью методов класса опрашиваю порт
поток у меня зациклен while(flag){...} а этот flag сбрасывается основной программой для завершения
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
21.06.2011, 14:55  [ТС]
А можно подробнее? Вот именно про фоновыи поток!!!Как его создать? У меня на кнопке пока вызывается функция, которая работает с методами класса Open, Close и т.д. И порт работает, а форма зависает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private void buttonInitializeunit_Click(object sender, EventArgs e)
        {
            WorkUnit("Initializate");
        }
//.......
 public void WorkUnit(string sButton)
        {
            try
            {
                #region firstconnected
                textBox1.Text = "";
                string isFirstAns = "";  //+ or -
                MessageBox.Show("Reset and back again then prees OK button.", "Connection");
 
               // SerialPortTester testGPS = new SerialPortTester(); //экземпляр класса, которыи "разговаривает" с портом
                testGPS.DisplayWindow = rtbDisplayGPRS; //
 
                testGPS.iBaudRate = Convert.ToInt32(comboBoxBaudrate.Text);
                testGPS.DTR = false;
                testGPS.RTS = false;
//..........
Добавлено через 3 минуты
Т.е. как в BackgroundWork положить этот мои класс? Извините за назойливость!!!
0
 Аватар для -=G-L-A-V-A-K=-
18 / 18 / 3
Регистрация: 16.02.2010
Сообщений: 243
21.06.2011, 15:38
Нафига этот бэкграундворкер юзать?
Ставишь на форму прогрессБар, style = Marquee, visible = false, MarqueeAnimation = 25.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        public void readPort()
        {
            Thread.Sleep(5000);
            //тут чтение с COM порта
            progressBar1.Visible = false;
        }
 
        private void but_Click(object sender, EventArgs e)
        {
            progressBar1.Visible = true;
            Thread reading = new Thread(readPort);
            reading.Start();
        }
P.S. запускать через Ctrl+F5
0
Заблокирован
21.06.2011, 15:39
в наших программах много различий
например
- у меня vb.net
- потоки стартуют
VB.NET
1
2
                    Dim t As Thread = New Thread(AddressOf ThreadForBlaBla)
                    t.Start(PortNum)
- при коннекте заполняю не только DCB, но и CommTimeouts
- опрашиваю винапишными функциями, а у вас, если не ошибаюсь класс SerialPort
но самое главное язык, я на C# потоками и компортами не занимался, только так, по аналогии
(у меня C# - хобби, и то винформс, а писАть приходиться на vb.net)
1
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
21.06.2011, 15:58  [ТС]
-=G-L-A-V-A-K=-
Увы, пользователь не будет нажимать Ctrl_F5 И чтобы вся форма не зависала

Dzhej-Dzhej, в любом случае - спасибо большое, читаю умные книжки дальше, пока безрезультатно ...

Добавлено через 11 минут
Как понять(не перевести, а понять и починить) следующую ошибку"Cross-thread operation not valid: Control 'comboBoxBaudrate' accessed from a thread other than the thread it was created on."?
0
Заблокирован
21.06.2011, 16:01
iva_a, -=G-L-A-V-A-K=- предложил тоже нормальный подход, только на
C#
1
            progressBar1.Visible = false;
будет ошибка доступа из разных потоков, можно поискать на форуме как это обойти через Invoke, я просто использую для своих целей BeginInvoke с делегатами
"запускать через Ctrl+F5" - это подсказка для тех, кто не догадывается, как компилировать

Добавлено через 1 минуту
Цитата Сообщение от iva_a Посмотреть сообщение
Как понять(не перевести, а понять и починить) следующую ошибку"Cross-thread operation not valid: Control 'comboBoxBaudrate' accessed from a thread other than the thread it was created on."?
то о чем я уже сказал, только для comboBoxBaudrate
1
 Аватар для -=G-L-A-V-A-K=-
18 / 18 / 3
Регистрация: 16.02.2010
Сообщений: 243
21.06.2011, 16:05
пользователю не надо будет, просто exe файл надо копировать из папки Release а не Debug. Можно через делегаты сделать, но тут я точно незнаю как.
0
168 / 140 / 23
Регистрация: 02.01.2011
Сообщений: 913
22.06.2011, 10:31  [ТС]
-=G-L-A-V-A-K=-
Спасибо, exe в любом случе будет в v release, я надеюсь

Dzhej-Dzhej Про доступ из разных потоков я уже поняла, я тупо поставила на кнопку
C#
1
            backgroundWorker1.RunWorkerAsync();
, а в
C#
1
2
3
4
 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            WorkUnit("Initializate");
        }
А в этой функции есть считывание данных из комбобоксов, текстбоксов, а DoWork не допускает разговора В обработчике событий DoWork нельзя выполнять действия ни с какими объектами пользовательского интерфейса.Вместо этого следует взаимодействовать с пользовательским интерфейсом с помощью событий ProgressChanged и RunWorkerCompleted. Вообшем, зарапортовалась ...

Добавлено через 18 часов 11 минут
Грустно продолжаю...Есть вот такой класс

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
using CellPipe7;
 
namespace SerialPortTest
 
{
  public  class SerialPortTester
  {//==================
      private RichTextBox _displayWindow;
      private Color[] MessageColor = { Color.Blue, Color.Green, Color.Black, Color.Orange, Color.Red };
      public enum MessageType { Incoming, Outgoing, Normal, Warning, Error };
      public bool isOpen = false;
      public string sMakeCommand = "";  //for Button Initializate (sMakeCommand="Initialize" or Send Server sMakeCommand="SendServer" )
      //================================
      public RichTextBox DisplayWindow
      {
          get { return _displayWindow; }
          set { _displayWindow = value; }
      }
      //=============================
      [STAThread]
      public void DisplayData(MessageType type, string msg)
      {
          _displayWindow.Invoke(new EventHandler(delegate
      {
          _displayWindow.SelectedText = string.Empty;
          _displayWindow.SelectionFont = new Font(_displayWindow.SelectionFont, FontStyle.Bold);
          _displayWindow.SelectionColor = MessageColor[(int)type];
          _displayWindow.AppendText(msg);
          _displayWindow.ScrollToCaret();
      }));
      }
      //==================================
      public int iBaudRate=9600;
      public bool DTR=true;
      public bool RTS=true;
   
      //===================================
  //    public List<string> sCom
        SerialPort sp;
        public SerialPortTester()
        {
            string strCom = "COM1";
            sp = new SerialPort(strCom);
            sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
           sp.BaudRate = iBaudRate;
            // sp.BaudRate = iBaudRate;
            sp.DataBits = 8;
            sp.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1");
            //sp.DtrEnable = true;
            sp.DtrEnable = DTR;
            //sp.RtsEnable = true;
            sp.RtsEnable = RTS;
            sp.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
            //sp.DiscardOutBuffer();
            //==============
            
          
        }
      
        public void ChangeDTRRTS(bool bDTR, bool bRTS)
        {
            sp.DtrEnable = bDTR;
            sp.RtsEnable = bRTS;
        }
        public string ClearStroka()
        {
            return("");
        }
           public void OpenPort(string strCom)
            {
 
                try
                {  
                    sp.Open();
                    isOpen = true;
                
                bool connChecker = sp.IsOpen;
                if (connChecker==true)
                {
                    //MessageBox.Show("Port Open  "+ strCom);
                  
                }
                else
                {
                    Console.WriteLine("Cannot open the connection to port {0}", strCom);
                }
                }
                catch (Exception e2)
                {
                    MessageBox.Show(e2.ToString());
                }
                finally
                {
 
                }
            }
          void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                SerialPort sp = (SerialPort)sender;
                 //this.Invoke(new EventHandler(DoUpdate));              
               stroka = stroka + sp.ReadExisting();
 
                 if ((stroka.IndexOf(">>")) != -1) 
               {
                 // MessageBox.Show("Read: sp_DataReceived ->>" + ">>");
                   Thread.Sleep(3000);
               }
               else
               {
                  // MessageBox.Show("Read: sp_DataReceived " + stroka);
                     Thread.Sleep(3000);
               }
 
            }
            public string stroka = "";
           /* private void DoUpdate(object s, EventArgs e)
            {
 
                stroka = stroka + sp.ReadExisting();
                MessageBox.Show("Read: DoUpdate  "+ stroka);
            }*/
            public void SendToPort(string str1)
            {
                sp.Write(str1);
            }
            public void ClosePort(string strCom)
            {
 
                    bool connChecker = sp.IsOpen;
                    if (connChecker)
                    {
                        sp.Close();
                       // MessageBox.Show("Port   " + strCom + "   closed");
                        isOpen = false;
                      
                    }
                    else
                    {
                        MessageBox.Show("Cannot closed the connection to port " + strCom);
                    }
            }
            public string ReadData()
            {
                //stroka = stroka + sp.ReadExisting(); //prpverit' v CONfiguration
                 stroka = sp.ReadExisting();
               return stroka;
            }
             
    }
 
    }
Почему когда я хочу обьявить его как поток, получаю ошибку? Как работать с этим классом в отдельном потоке?
C#
1
2
        SerialPortTester testGPS = new SerialPortTester();
       public Thread reading = new Thread(testGPS);//ERROR "A field initializer cannot reference the non-static field, method, or property 'CellPipe7
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2011, 10:31

Sleep
Всем привет. Подскажите пожалуйста что то подобное на sleep, только чтобы сайт не сдох. Спасибо всем

sleep
есть сайт, используется MVC, точка входа - index.php если я пропишу в коде одной страницы (контроллера) sleep(50) то при открытии любой...

Sleep в C++
Функция Sleep() останавливается при считывания символа с клавиатуры. Мне нужно создать программу которая будет случайно генерировать a и b...

Sleep
Подскажите, как-то можно вывести строчки с паузой Если так, то на экране будут 3 строки сразу echo &quot;11111111&lt;br&gt;&quot;; ...

sleep в с++
Скажите, есть программа на с++, в ней используется функция sleep. Вроде все правильно, но выдает ошибку: Function 'Sleep' should have a...


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

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru