table.ssort

Страницы: 1
RSS
table.ssort, зависает терминал при выполнении table.ssort в main
 
Демонстрационный скрипт:
Код
local AllTrades = {}
function main()
  ID = AllocTable()
  AddColumn(ID, 1, '1', true, QTABLE_INT_TYPE, 20)
  CreateWindow(ID)
  row = InsertRow(ID, -1)

  while not stoped do
    if #AllTrades ~= 0 then
      local trade_num = table.sremove(AllTrades, 1).trade_num
      table.ssort({0, 0}, function()
        SetCell(ID, row, 1, ''..trade_num)
        return true
      end)
   else sleep(1) end
  end  
end

function OnAllTrade(alltrade)
  table.sinsert(AllTrades, alltrade)
end

Через непродолжительное время терминал вешается.
Зависание происходит при выполнении инструкции SetCell в main.
Надо делать так, как надо. А как не надо - делать не надо.
 
Похоже, SetCell ждёт код возврата и не может его получить, поскольку основной поток "заморожен"
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
Демонстрационный скрипт:
Код
   local  AllTrades  =  {}
 function   main ()
  ID  =   AllocTable ()
   AddColumn (ID,  1 ,  '1' ,  true , QTABLE_INT_TYPE,  20 )
   CreateWindow (ID)
  row  =   InsertRow (ID,  -  1 )

   while   not  stoped  do 
     if   # AllTrades ~ =   0   then 
       local  trade_num  =   table.sremove (AllTrades,  1 ).trade_num
       table.ssort ({ 0 ,  0 },  function ()
         SetCell (ID, row,  1 ,  ''  .. trade_num)
         return   true 
       end )
    else   sleep ( 1 )  end 
   end   
 end 

 function   OnAllTrade (alltrade)
   table.sinsert (AllTrades, alltrade)
 end   

Через непродолжительное время терминал вешается.
Зависание происходит при выполнении инструкции SetCell в main.
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Старатель, Добрый день,

     

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

     Приносим извинения за причиненные неудобства.
 
Нужно сделать операцию обновления ячеек атомарной, чтобы быть уверенным, что другой поток не изменит номер обновляемой строки.
Это будет возможно после исправления ошибки?
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,
Да
Страницы: 1
Читают тему
Наверх