Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Mon Oct 06, 2025 20:32    Post subject: Reply with quote

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) тоже должна помочь.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group