|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Иногда виснет комп. Делает это копирование, в качестве путей - расшареные диски на серверах в разных городах. В данном случае тянулось с Краснодара вБлаговещенск. Файлики маленькие 3 к байт в среднем. =LOGER("Транспорт","Копируем",M.PUTHOUT,AR_FILEEXIST[M.III,1],M.FILETO,AR_FILEEXIST[M.III,1]) TRY RENAME (M.PUTHOUT+AR_FILEEXIST[M.III,1]) TO (M.FILETO+AR_FILEEXIST[M.III,1]) FLUSH DOEVENTS CATCH M.ERR=.T. ENDTRY вот не выходит из этой конструкции.. потому что есть далее тоже лог. =LOGER("Транспорт","Скопирован",M.PUTHOUT,AR_FILEEXIST[M.III,1],M.FILETO,AR_FILEEXIST[M.III,1]) IF M.ERR ** БЛА БЛА ENDIF Мож есть че-нить более изящное? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 09:13 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEv, а почему flush, а не flush force? Да и копирование делается с помощью copy file, а не rename. Ну и в конце концов если у вас есть доступ к коду, пройдитесь отладкой и посмотрите, на каком именно операторе наступает зависание. PS. Название топика напомнило: "I shall kill you.... with DEATH!" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 10:15 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEvИногда виснет комп. ... Мож есть че-нить более изящное? Windows очень плохо работает когда проблемы с доступом к носителям (try/catch не спасает в этом случае). Для этого существуют другие "stateless" протоколы, например FTP, HTTP, sFTP etc... Но в этом случае Вам самому надо будет организовать проверку, что файл успешно скопировался... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 11:15 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Sergey Ch, привет! Сергей, ты кусочек кода кинь, а то на меня эти "прАтаколы" грусть наводят. Просто перенести файлик по сети хочется, а как устроено, че там внутри, как называется - пусть будет скрыто от меня. :) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 16:57 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
замени RENAME на COPY и DELETE убери FLUSH с DOEVENTS - лишнее это, пишется сразу на диск, а чего родит DOEVENTS это похлеще макроподстановки. Если очень надо - запусти копирование в фоне отдельным процессом. PS по хорошему правильно подсказывают - используй другие протоколы. Расшаренная папка в локалке хорошо, там излишний трафик незаметен. Для теста попробуй просто копировать свои маленькие файлы фарой или тоталом и посмотри скорость. PPS Как вариант, если есть возможность, пакуй файлы на отправителе в один архив. Накладных расходов трафика меньше будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 17:59 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEvSergey Ch, привет! Сергей, ты кусочек кода кинь, а то на меня эти "прАтаколы" грусть наводят. Просто перенести файлик по сети хочется, а как устроено, че там внутри, как называется - пусть будет скрыто от меня. :) Спасибо. Готовых работающих примеров на FoxPro у меня, увы нет Подобные вещи я пишу на .NET (там все для этого есть). Могу рассказать про архитектуру если интересно. Как использовать FoxPro с FTP идеи можно взять отсюда (ссылка на английском). Для HTTP можно использовать знакомые Вам WebServices (в свое время я просто передавал сразу готовые новые/измененные/удаленные записи на удаленные сервера а не файлы, хотя без проблем можно и сжатые файлы)... Примерно так... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2012, 23:46 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Dima Tзамени RENAME на COPY и DELETE убери FLUSH с DOEVENTS - лишнее это, пишется сразу на диск, а чего родит DOEVENTS это похлеще макроподстановки. Если очень надо - запусти копирование в фоне отдельным процессом. PS по хорошему правильно подсказывают - используй другие протоколы. Расшаренная папка в локалке хорошо, там излишний трафик незаметен. Для теста попробуй просто копировать свои маленькие файлы фарой или тоталом и посмотри скорость. PPS Как вариант, если есть возможность, пакуй файлы на отправителе в один архив. Накладных расходов трафика меньше будет. Спасибо, Doevents ставлю чтобы индикатор показывал или как то еще можно? Flush уберу. Команды заменю. Файликов много .. один большой архив ваще не лезет. Мелкие лучше ходят. И ходят почти всегда хорошо, но иногда, аж сервак не пускает на себя зайти в терминале - виснет на Rename (логами проверил). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2012, 17:38 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEvСпасибо, Doevents ставлю чтобы индикатор показывал или как то еще можно? Doevents обрабатывает действия пользователя, если он чего мышкой тыкать начнет, то это начнет выполнятся. Индикатор должен отрисовываться без Doevents. Можешь вставить wait ... window после каждого файлика и писать сколько штук осталось если известно. MaestroEvFlush уберу. Команды заменю. Файликов много .. один большой архив ваще не лезет. Мелкие лучше ходят. И ходят почти всегда хорошо, но иногда, аж сервак не пускает на себя зайти в терминале - виснет на Rename (логами проверил). Это говорит о том что связь между этими компами очень плохая. По хорошему переносить через 3-й сервер с быстрым инетом, т.е. отправитель выкладывает, получатель забирает. В текущем варианте можешь попробовать отлавливать зависания. Засекай время перед копированием каждого файла, после проверяй. Если превысило предел - останавливай копирование. Второй вариант - генерить батник для копирования и запускать его отдельным процессом, ждать определенное время и убивать процесс если время истекло, а он еще копирует. Только удаление в батник не пиши, т.к. удаление может сработать даже если копирование не сработает. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 07:48 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Опа.. обнаружился вопрос по doevents. Есть индикатор.. пусть даже написаный на Wait Window. Без Doevents он не показывается ! В циклах - не хватает времени ему на прорисовку. Кто и как прорисовает индикатор? Есть другой индикатор на объекте - все тоже самое.. пока не вставляю в цикл Doevents - экран не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 10:51 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Dima T, есть анализатор времени передачи. Не передаю и не тяну файлы если время больше 2 секунд, но вешается все, (если вешается), при первой попытке обращения.. Bat ник.. Ну можно и Батник попробовать.. А как этот процесс убивать из фокса? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 10:56 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEvBat ник.. Ну можно и Батник попробовать.. А как этот процесс убивать из фокса? Класс waitexec Код: sql 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. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244.
В простейшем случае использовать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 13:35 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Кстати, можно еще попробовать копировать через WshShell Вот неплохая дока по нему http://www.script-coding.com/WSH/WshShell.html ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 15:05 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Не туда ссылку дал. вот http://www.script-coding.com/WSH.html Обратите внимание на следующие методы: WshShell.Run - запуск программы с ожиданием завершения + можно скрыть окно. FileSystemObject - тут все методы хороши. Встроенными фоксовыми я уже и не пользуюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 15:13 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
ReeseНе туда ссылку дал. вот http://www.script-coding.com/WSH.html Обратите внимание на следующие методы: WshShell.Run - запуск программы с ожиданием завершения + можно скрыть окно. FileSystemObject - тут все методы хороши. Встроенными фоксовыми я уже и не пользуюсь. WshShell пробовал как-то, с батником он не заработал, правда долго не разбирался. FileSystemObject - там только работа с файлами и папками. Запуска там нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 15:59 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
to DimaT Да не обращай внимания. Очередной решивший что все знает, хотя даже не прочитал о чем речь. По поводу WshShell. Я часто этим пользуюсь. Там все просто Код: vbnet 1. 2.
Будет ждать пока test.bat завершит работу. А FileSystemObject - это я про то что в самом начале спрашивалось, про более изящное решение. Насколько помню, надо будет только в try обернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2012, 20:24 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
В простейшем случае использовать так: loWEx = NewObject('waitexec') *loWEx.lHide = .T. && если надо спрятать окно консольной проги if loWEx.Execute('c:\batnik.cmd') && Запускаем if !loWEx.WaitStop(1000) && Пауза в мс, если процесс закончится раньше - вернет .T. * Время истекло, убиваем loWEx.KillProcess() endif endif Спасибо, а почему бы сразу вместо батника не запускать строку ДОСа: Move /Y бла бла и убивать этот процесс если он дольше 1 минуты? Как адатпировать Ваш класс для выполнения внутренних команд Доса? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 05:03 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
MaestroEvСпасибо, а почему бы сразу вместо батника не запускать строку ДОСа: Move /Y бла бла и убивать этот процесс если он дольше 1 минуты? Команды доса выполняет CMD.EXE Код: sql 1. 2. 3. 4. 5.
Если в путях пробелы есть, то в двойные кавычки имена файлов надо взять. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 08:41 |
|
Виснет.. насмерть.
|
|||
---|---|---|---|
#18+
Если именно в таком виде будешь пользоваться то можно проще писать: Код: sql 1. 2. 3. 4. 5.
у Execute() второй параметр время ожидания в секундах. Третий - рабочая папка запускаемого процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2012, 08:53 |
|
|
start [/forum/topic.php?fid=41&fpage=49&tid=1583328]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 456ms |
0 / 0 |