Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Пауза Добавлено: 21.01.11 01:13  

Автор вопроса:  Nezhniy | Web-сайт: www.helpim.ru | ICQ: 419841508 

Ответить

  Ответы Всего ответов: 27  

Номер ответа: 16
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #16 Добавлено: 21.01.11 18:22
uNicO*, я тебе советую рассмотреть вариант с запуском потока, а не использовать костыли вроде того, который ты видишь в 11-м сообщении.

Ответить

Номер ответа: 17
Автор ответа:
 Nezhniy



ICQ: 419841508 

Вопросов: 9
Ответов: 100
 Web-сайт: www.helpim.ru
 Профиль | | #17
Добавлено: 21.01.11 18:33
Artyom, через System.Threading.Thread.Sleep я пробовал ,создавал новый поток, туда засовывал процедуру, у меня картинки не успевают отображаться почему то, я описывал это в предыдущих сообщениях( в нубском варианте у меня все нормально ,то что мне нужно , насчет UI я не знаю что это , я еще юн и неопытен ) в мсдне не вижу объяснения. может быть все таки просто связать с способами time которые ты предложил ?

Ответить

Номер ответа: 18
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #18
Добавлено: 21.01.11 20:06
Почему этот код нубский тебе объяснил еще один умнейший дотнетчик в посте 13, который правильно расставляет отступы в коде. Но в твоем случае он вполне подойдет, ибо ты пишешь не систему координации спутников GPS или управления атомной электростанции. Тебе просто нужнен код который работает. При этом я сомневаюсь в том, что этот код будет использован в промышленной системе или еще где нибудь, где описанные в посте 13 последствия будут существенными. Поэтому на всякие переходы на летнее время/смену часового пояса/синхронизацию часов/падение метеорита в голову пользователю можно смело забивать. Если поток пробовал, то дай код с потоком, разберем.

PS: Ниже может следовать пост про то что говнокод запрещен конституцией и все сразу по умолчанию должны знать потоки, незащищенный код, делегаты и прочую хрень, а более кривые, но простые способы просто не имеют право на существование, потому что я так прочитал в статье в интернете/книжке/знал с рождения. На него тоже не стоит обращать внимание.

Ответить

Номер ответа: 19
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #19 Добавлено: 21.01.11 20:31
Я бы использовал Stopwatch.

Ответить

Номер ответа: 20
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #20
Добавлено: 21.01.11 20:33
Можно, если интерфейс не будет подвисать.

Ответить

Номер ответа: 21
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #21 Добавлено: 21.01.11 20:52
VBD, ты не прав.. Не надо перетаскивание говнокода из VB6 прикрывать простотой и доступностью, это совсем не в тему. Да,он был актуален в VB6 ввиду отсутствия потоков, но в НЕТ делать подобное - это реально УГ. И даже без учетов перехода времени и прочих причин, названных коллегой ранее, этот код не даст гарантированной задержи по времени - это раз. Во-вторых,если в цикле достаточно долгие операции то погрешность на разных компах может достигать чудовищных величин.

Ответить

Номер ответа: 22
Автор ответа:
 Nezhniy



ICQ: 419841508 

Вопросов: 9
Ответов: 100
 Web-сайт: www.helpim.ru
 Профиль | | #22
Добавлено: 21.01.11 21:58
пфф , я запутался , скажите тогда через что лучше делать чтоб не было погрешности , там Artyom говорил про DateTime.UtcNow, Environment.TickCount , что лучше ? то что с новым потоком, я пробовал , виснут картинки, а там через UI какой то , я в этом к сожалению пока не понимаю.

Ответить

Номер ответа: 23
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #23
Добавлено: 21.01.11 22:23
EROS пишет:
VBD, ты не прав.. Не надо перетаскивание говнокода из VB6 прикрывать простотой и доступностью, это совсем не в тему. Да,он был актуален в VB6 ввиду отсутствия потоков, но в НЕТ делать подобное - это реально УГ. И даже без учетов перехода времени и прочих причин, названных коллегой ранее, этот код не даст гарантированной задержи по времени - это раз. Во-вторых,если в цикле достаточно долгие операции то погрешность на разных компах может достигать чудовищных величин.

Хорошо, тогда объясняй потоки сам.

Ответить

Номер ответа: 24
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #24 Добавлено: 21.01.11 23:11
скажите тогда через что лучше делать чтоб не было погрешности

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

Ответить

Номер ответа: 25
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #25 Добавлено: 21.01.11 23:58
Nezhniy, покажи свой код и найдем где есть проблема.

Ответить

Номер ответа: 26
Автор ответа:
 Nezhniy



ICQ: 419841508 

Вопросов: 9
Ответов: 100
 Web-сайт: www.helpim.ru
 Профиль | | #26
Добавлено: 22.01.11 01:05

  1. Dim xz As New System.Threading.Thread(AddressOf Meshalka2)
  2.  
  3.  
  4. Private Sub Meshalka2()' этот код перемешивает labelы по форме
  5.         Dim plist As New List(Of Label)
  6.         plist.Add(L1)
  7.         plist.Add(L2)
  8.         plist.Add(L3)
  9.         plist.Add(L4)
  10.         plist.Add(L5)
  11.         plist.Add(L6)
  12.         plist.Add(L7)
  13.         plist.Add(L8)
  14.         plist.Add(L9)
  15.  
  16.         Randomize()
  17.         Dim o As Integer
  18.         For o = 0 To 9
  19.             Dim d As Long
  20.             d = Fix(Rnd() * 9)
  21.             Dim q As Long
  22.             q = plist.Item(d).Left
  23.             Dim w As Long
  24.             w = plist.Item(d).Top
  25.  
  26.             Dim e As Long
  27.             e = L9.Left
  28.             Dim r As Long
  29.             r = L9.Top
  30.  
  31.  
  32.             plist.Item(d).Left = e
  33.             plist.Item(d).Top = r
  34.  
  35.             L9.Left = q
  36.             L9.Top = w
  37.  
  38.         Next o
  39.     End Sub
  40.  
  41. private sub starting
  42. xz.start
  43. xz.sleep(5000)'тут нужна пауза допустим в 5 секунд
  44.  
  45. form2.show
  46.  
  47.  end sub



Вот когда я такой код делаю, у меня не успевают отображаться labelы когда перемешиваются, он уже делает паузу. При нубском же коде такого нет , все как надо.

Ответить

Номер ответа: 27
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #27 Добавлено: 22.01.11 03:09
Ок, теперь расскажи что ты хочешь сделать? Как по твоему должна выглядеть работа приложения? Я не понимаю смысл запуска отдельного потока в этой задаче и смысл задержки

  1. xz.sleep(5000)

Во-первых, вызов делается через System.Threading.Thread.Sleep, а не так как ты показал. Sleep это Shared метод, и он не принадлежит какому-то экземпляру. Тот факт что VB позволяет вызывать Shared методы, обращаясь к экземпляру это только бонус, который, возможно, сбил тебя с толку. Усыпляется тот поток, котоырй вызывает метод Sleep, т.е. в данном случае - UI поток.

Это первое. Второе - ты из нового запущенного потока управляешь свойствами элементов управления. Это нужно делать через Control.Invoke/Control.BeginInvoke, поскольку обращаться к контролам можно только из потока, который их и создал.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам