Orion9

|
Posted: Mon Oct 06, 2025 20:32 Post subject: |
|
|
Loopback
Возможно, нашел в чем причина зависаний. Похоже, поток с циклом просто вылетает без каких-либо сообщений об ошибке.
Шаги в цикле разделены так:
Code: | Step 1. TorrentGet
Step 2. WinSetText
Step 3. FileFindEv
Step 3. aQuery.Text
Step 4. aCount.Add
Step 5. sList
Step 6. sDirs
Step 7. StrReplace
Step 8. Next |
Третий шаг продублирован, т.к. я исключил aQuery.Text из строки запроса и сделал дополнительный, временный шаг через строковую переменную. Проблема не ушла, и я уж думал, что стоит попробовать обновить Everything, но тут пришла мысль "а что происходит с циклом? он что, так и продолжает висеть?". Т.е. если 3-4 раза зависнет, то по идее 3-4 потока должно висеть и ждать ответа, к тому же вы говорили про тайм-аут, который никак о себе не говорит. В общем, вложил вызов функции в поток:
Code: | Func FindTorrentParts(lParam)
RunThread "ThreadTorrentParts" lParam
EndFunc |
И сразу все увидел. Старт происходит нормально:
Code: | Thread #1:
Origin: Main
ThreadID: 7128
Started: 06.10.2025 18:14:54
Thread #2:
Origin: RunThread
Function: Function: ThreadTorrentParts
ThreadID: 1548
Started: 06.10.2025 18:15:16
Thread #3:
Origin: RunThread
Function: Function: WinFindTorrentData
ThreadID: 2020
Started: 06.10.2025 18:15:16 |
Но затем поток ThreadTorrentParts просто исчезает, а окно прогресс-бара продолжает висеть, т.к. оно крутится в отдельном потоке:
Code: | Thread #1:
Origin: Main
ThreadID: 7128
Started: 06.10.2025 18:14:54
Thread #3:
Origin: RunThread
Function: Function: WinFindTorrentData
ThreadID: 2020
Started: 06.10.2025 18:15:16 |
И кстати, как только я стал запускать отдельным потоком, в отладочной информации остановка не только на третьем шаге стала фиксироваться, но и на пятом и даже на восьмом, что особенно забавно, учитывая, что между восьмым шагом и первым стоит всего одно условие проверки глобальной переменной:
Code: | # перечисление файлов в торренте
For j = 0 To nCount - 1
If gTorrentDbg Then gDbgStep = "Step 1. TorrentGet j=" & j & auCRLF
....
....
If gTorrentDbg Then gDbgStep &= "Step 8. Next"
# опрерация прервана закрытием окна прогресса
If g_FindTorrTask = 0 Then Break
Next |
В общем, надеюсь, мне удалось обозначить проблему, но есть еще один существеный нюанс. Этот косяк происходит только в ТСх64. В ТСх32 работает стабильно.
A55555
Даже не знаю, что у вас не так с экраном. У меня подобной проблемы нет - обновление и перерисовка происходят в штатном режиме. А вот проблема с зависанием, увы, никуда не делась, но будем надеяться, что то, что я написал выше, поможет Loopback найти причину.
Дело, конечно, не только в Blu-ray дисках. На любых торренах, где есть много вложенных файлов (аудио, музыка и т.д.), такое случается, и часто. Хотя, как я уже говорил, эта проблема характерна только для 64-битного ТС. Вы проверяли работу функционала на 32-битном ТС? Может быть и проблема с экраном тоже уйдет.
Если проблема только с перерисовкой, то решение, которое я вчера запостил должно помочь. Обе эти команды - 70501 и 70504 - заканчивают свою работу функцией GoToPathFromMsg, которая и осуществляет переход. В обновленную функцию выше я уже добавил команды для перерисовки и обновления панели, поэтому нет необхожимости отдельно их добавлять к 70501 и 70504.
В следующий раз когда экран не обновится, просто нажмите Ctrl+R, если это поможет, то и посылка SendCommand(540) тоже должна помочь. |
|