| Author |
Message |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/06/2008 18:41:16
|
z00n
Постоянный посетитель
Joined: 15/02/2008 12:15:56
Messages: 96
Offline
|
GrayFace wrote:А что такое weak value?
Это вот такая таблица:
Они нужны чтобы держать weak-reference на обекты - у вас есть ссылка, но это не мешает GC собирать объект, если на него нет других, не-слабых ссылок.
http://en.wikipedia.org/wiki/Weak_reference
http://www.lua.org/pil/17.html
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/06/2008 18:44:31
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
z00n wrote:Дело в том, что файл уже открыт, раз вы не можете его удалить. Найдите где в вашей программе вы открываете файл и не закрываете его. Если вам нужно держать файлы открытыми - заведите глобальную lookup-table :: {filename->filehandle} c weak value. Это позволит закрывать файл по имени перед удалением.
Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/06/2008 20:45:06
|
z00n
Постоянный посетитель
Joined: 15/02/2008 12:15:56
Messages: 96
Offline
|
Berkut wrote:
Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).
Это все врядли так - закрытый файл без проблем удаляется любым способом:
Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/06/2008 21:42:28
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
z00n wrote:Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.
Да уже не актуально, т.к. после явного объявления открытия файла, он прекрасно удаляется.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/07/2008 20:34:13
|
GrayFace
Новичок
Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline
|
А возможно загрузить скрипт из строки, при этом указав ему какое-нибудь имя? (чтобы в случае ошибки это имя выдавать) т.е. как dofile, но без файла
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/07/2008 21:16:43
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
GrayFace wrote:А возможно загрузить скрипт из строки, при этом указав ему какое-нибудь имя? (чтобы в случае ошибки это имя выдавать) т.е. как dofile, но без файла
loadstring принимает второй параметр "chunkname".
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/07/2008 23:23:58
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
Можно ли как-то оптимизировать такую конструкцию для сохранения многоуровневых таблиц?
Проблема в том, что при некоторых условиях (хоть убейте, так и не смог выяснить при каких конкретно) таблица сохраняется в искажённом виде:
В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 06/07/2008 00:03:19
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
Berkut wrote:В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
Ну, похоже, "r+" и есть это слабое место. Используй "a".
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 06/07/2008 10:26:23
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
Попробую. Вот только так и не понял, в чём кривизна... Ведь в подавляющем большинстве случаев функция работает нормально.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 06/07/2008 23:00:00
|
GrayFace
Новичок
Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline
|
Похоже, pluto собралось неправильно
error LNK2019: unresolved external symbol _pluto_persist referenced in function "int __cdecl Persist(struct lua_State *)" (?Persist@@YAHPAUlua_State@@@Z)
error LNK2019: unresolved external symbol _pluto_unpersist referenced in function "int __cdecl Unpersist(struct lua_State *)" (?Unpersist@@YAHPAUlua_State@@@Z)
В pluto.lib вообще нет ни одного упомянания persist
Добавлял так же, как Lua, в "Linker -> General -> Additional Library Directories" и в "Linker -> Input -> Additional Dependancies".
This message was edited 1 time. Last update was at 06/07/2008 23:03:32
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/07/2008 10:30:20
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".
Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/07/2008 11:57:59
|
smz
ГУРУ
Joined: 14/03/2008 13:23:00
Messages: 282
Offline
|
Berkut wrote:
smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".
Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.
1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.
2. Замени этот кусок:
на этот:
This message was edited 1 time. Last update was at 08/07/2008 12:02:47
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/07/2008 12:42:52
|
Berkut
Новичок
![[Avatar]](/forum/images/avatar/3295c76acbf4caaed33c36b1b5fc2cb1.jpg)
Joined: 19/04/2008 10:28:01
Messages: 21
Offline
|
smz wrote:
1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.
|
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/07/2008 12:49:27
|
mraleph
Постоянный посетитель
![[Avatar]](/forum/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.png)
Joined: 20/05/2008 19:13:01
Messages: 42
Location: Новосибирск
Offline
|
Помойму проблема очевидно. r+ это обновление, доступ на чтение и запись. Данные пишутся поверх уже записанного.
Если второй раз пишется более короткая таблица, чем была записана в первый раз получаем косячню.
|
This mystery is already on the tip of my tongue |
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 09/07/2008 00:48:02
|
GrayFace
Новичок
Joined: 17/06/2008 06:54:06
Messages: 27
Location: Новосибирск
Offline
|
Повторю вопрос, чтобы не потерялся:
Похоже, pluto собралось неправильно
error LNK2019: unresolved external symbol _pluto_persist referenced in function "int __cdecl Persist(struct lua_State *)" (?Persist@@YAHPAUlua_State@@@Z)
error LNK2019: unresolved external symbol _pluto_unpersist referenced in function "int __cdecl Unpersist(struct lua_State *)" (?Unpersist@@YAHPAUlua_State@@@Z)
В pluto.lib вообще нет ни одного упомянания persist
Добавлял так же, как Lua, в "Linker -> General -> Additional Library Directories" и в "Linker -> Input -> Additional Dependancies".
|
|
|
 |
|
|