purebasic.info

PureBasic forum
Текущее время: Сб июл 21, 2018 6:24 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: пара-тройка мелких вопросов
СообщениеДобавлено: Ср апр 08, 2015 5:21 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
Здравствуйте. Допустим запускается прога на съемном носителе. По идее образ("бинарь") помещается в память и уже оттуда работает, то есть после запуска можно смело извлекать флэшку? Сбоев быть не должно?

Второе: открываю текстовик таким образом
Код:
1
RunProgram("notepad", file.s, "");ес-но с flash


после чего "она" отказывается корректно/безопасно извлекаться (привязана к блокноту). Как бы изголиться, чтобы не было этой паразитной привязанности.

и... "вишенка на торт"
Пётр, для Вас созрел вопрос: почему Вы утверждаете (если не ошибаюсь в теме про глобальную кнопку отмены), что KillThread() лучше избегать. Использую код Никиты - MessageRequester в отдельном потоке (нужно для индикации процесса). Сколько не запускал, каких-либо сбоев в связи с использованием KillThread() не обнаружено.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Ср апр 08, 2015 6:09 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11206
Благодарил (а): 4 раз.
Поблагодарили: 421 раз.
knower писал(а):
По идее образ("бинарь")помещается в память и уже оттуда работает
Не весь. Помещаются только некоторые секции. К примеру, секция ресурсов загружается лишь по запросу. Также не загружается то, что дописано в конец файла (самораспаковывающиеся архивы и т. д.). Если выдернуть флешку нет гарантии что прога будет нормально работать.

knower писал(а):
Как бы изголиться, чтобы не было этой паразитной привязанности.
Комп флешку силой не держит и ничего не мешает ее выдернуть.

knower писал(а):
почему Вы утверждаете (если не ошибаюсь в теме про глобальную кнопку отмены), что KillThread() лучше избегать.
Ну например выделили память в потоке, скажем создали массив и при принудительном завершении потока, память остается занятой!
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Procedure Thread(x)
  Dim Ar.a(200000000) ; Массив на 200 метров.
  Repeat
    Delay(100)
  ForEver
EndProcedure
 
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)
 
x=CreateThread(@Thread(), 0)
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)
KillThread(x)
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)

Если же корректно завершить поток, память освободится.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Global Cancel=#False
 
Procedure Thread(x)
  Dim Ar.a(200000000) ; Массив на 200 метров.
  Repeat
    Delay(100)
  Until Cancel=#True
EndProcedure
 
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)
 
x=CreateThread(@Thread(), 0)
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)
Cancel=#True
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Ср апр 08, 2015 7:28 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
что ж... наглядно. Пётр, как корректно завершить процесс в этом случае:
Код:
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
;оригинальный код Никиты
Structure MSGBox
  Title$
  Text$
  Flags.l
EndStructure
 
Procedure MessageBoxInThread(*params.MSGBox)
  MessageRequester(*params\Title$, *params\Text$, *params\Flags)
EndProcedure
 
Define params.MSGBox
 
params\Title$ = "Заголовок"
params\Text$ = "MessageRequester не будет останавливать программу, и числа будут выводиться!"
params\Flags = 64
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память до запуска потока
x=CreateThread(@MessageBoxInThread(), @params);создание потока/вывод сообщения
Delay(1000)
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память после запуска потока
 
;далее некий процесс/работа
;основной программы
For i = 1 To 50
  Debug i
  Delay(100)
Next
 
KillThread(x);завершение потока
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память по завершении работы


память понемногу утекает.

Пётр писал(а):
Комп флешку силой не держит и ничего не мешает ее выдернуть.

жестоко. Попробую еще раз объяснить, что нужно: программа запускается с флешки, шерстит файлы на локальном hdd, при определенных условиях открывает один или несколько файлов, которые все также находятся на локальном hdd. Далее нужно отпустить флэшку, выдернуть ее и спокойно анализировать открытые файлы.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Ср апр 08, 2015 7:47 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
knower писал(а):
программа запускается с флешки, шерстит файлы на локальном hdd, при определенных условиях открывает один или несколько файлов, которые все также находятся на локальном hdd. Далее нужно отпустить флэшку, выдернуть ее и спокойно анализировать открытые файлы.

Пусть прога копирует себя во временную папку или папку юзера и оттуда запускается, а свою копию завершает.Делай с флешкой после этого что угодно, прога будет работать как положено. Если прога небольшая, то процесс копирования пройдет незаметно.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Ср апр 08, 2015 8:08 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
kvitaliy, спасибо конечно, но это не вариант. Прога-то маленькая, только тут заковыка в другом: не должно ее быть в принципе на ПК. Если же следовать Вашему совету, то это нужно мониторить пока все копии блокнота закроются, чтобы потом самоудалиться. В идеале хотелось быстренько отыскать нужное и открыть. Чтобы никаких претензий, архив-то официальный. Лежит тут же. Просмотр не возбраняется.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 8:44 am 
Не в сети
профессор

Зарегистрирован: Чт сен 22, 2011 6:21 pm
Сообщений: 231
Благодарил (а): 31 раз.
Поблагодарили: 22 раз.
Пункты репутации: 0
Код без Kill
Код:
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
;оригинальный код Никиты
Structure MSGBox
  Title$
  Text$
  Flags.l
EndStructure
 
Procedure CloseMsgBox(*params.MSGBox)
  HWND=FindWindow_("#32770", *params\Title$)
  If HWND
    PostMessage_(HWND, #WM_CLOSE, 0, 0 )
  EndIf
EndProcedure
 
Procedure MessageBoxInThread(*params.MSGBox)
  MessageRequester(*params\Title$, *params\Text$, *params\Flags)
EndProcedure
 
Define params.MSGBox
 
params\Title$ = "Заголовок"
params\Text$ = "MessageRequester не будет останавливать программу, и числа будут выводиться!"
params\Flags = 64
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память до запуска потока
x=CreateThread(@MessageBoxInThread(), @params)            ;создание потока/вывод сообщения
Delay(1000)
 
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память после запуска потока
 
;далее некий процесс/работа
;основной программы
For i = 1 To 50
  Debug i
  Delay(100)
Next
 
CloseMsgBox(@params)
;KillThread(x);завершение потока
 
Delay(1000)
Debug Str(MemoryStatus(#PB_System_FreePhysical)/1024/1024);занимаемая память по завершении работы



если:
knower писал(а):
...В идеале хотелось быстренько отыскать нужное и открыть....

то зачем:
knower писал(а):
... то это нужно мониторить пока все копии блокнота закроются, чтобы потом самоудалиться.

вы определитесь поточнее с техзаданием.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 4:12 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
knower писал(а):
kvitaliy, спасибо конечно, но это не вариант. Прога-то маленькая, только тут заковыка в другом: не должно ее быть в принципе на ПК. Если же следовать Вашему совету, то это нужно мониторить пока все копии блокнота закроются, чтобы потом самоудалиться. В идеале хотелось быстренько отыскать нужное и открыть. Чтобы никаких претензий, архив-то официальный. Лежит тут же. Просмотр не возбраняется.

Не копируй на винт, копируй в память, запускай прогу из памяти и выдёргивай флешку. Правда я не знаю как это реализовать, но это скорее всего можно сделать.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 4:23 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 139
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
knower попробуй
http://www.forums.purebasic.com/english ... 3f#p427441
http://forums.purebasic.com/english/vie ... 19#p311116
http://forums.purebasic.com/english/vie ... hp?t=37618


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 9:21 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
Kuzmat, спасибо за процедуру. Потестил на этом коде-примере, вроде память возвращается.
Kuzmat писал(а):
определитесь поточнее с техзаданием.

посчитал что если флэш не отпускает, то и exe (скопированный на hdd) не даст удалить пока открыт блокнот. Оказывается все удаляется. Вобщем, нужно еще подумать. Не хочется копировать весь рабочий exe на диск. Тогда возникает следующий вопрос: как передать массив другой программе?
Принцип: массив с путями к открываемым файлам формируется в основной проге, далее из датасекции на hdd извлекается "открывашка" и вот ей-то и нужно передать эти самые пути + отдельным параметром кол-во открываемых файлов. Вопрос только по передаче массива. Примерный код:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
;основная прога
;...
Dim A.s(2)
A(0)="d:\1.txt"
A(1)="d:\2.txt"
A(2)="d:\3.txt"
;...
 
;дополнительная
For i=0 To 2
  Delay(100)
  RunProgram("notepad", A(i), "")
Next i



m0t0d0r, спасибо за совет.
LinXP, спасибо. Это интересно. Пока ни один вариант на w786 pb511 не завелся, может АВ мешает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 9:27 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
knower писал(а):
не должно ее быть в принципе на ПК.

От чего такое ограничение?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 9:38 pm 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
MrF, потому что самодеятельность. А инициатива как известно...
можно конечно и вручную лопатить архив, но это муторно и сплошная рутина. вот и потребовалась автоматика, чтобы оценить работу оборудования за день. вобщем, если кратко, то поиск некоего события в логе.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 10:08 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
knower писал(а):
MrF, потому что самодеятельность. А инициатива как известно...

Тыкать каждый раз флешкой в комп, рискуя его однажды заразить это не самодеятельность?
А один раз записать нужный проверенный инструмент, который позволит выполнить работу качественнее и быстрее это плохо?
По моему вы сами себе придумываете какие то сложности, что бы их стойко преодолевать, напомнило мою любимую Российскую Армию.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Чт апр 09, 2015 10:51 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 139
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
knower писал(а):
LinXP, спасибо. Это интересно. Пока ни один вариант на w786 pb511 не завелся, может АВ мешает.

http://rghost.ru/6GSFv9g6P
компилил под хрюшкой (pb531), но запускается на w7х86, аваст молчит
а вот под w7x64 калькулятор из xp запускаться не захотел..


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Пт апр 10, 2015 8:08 am 
Не в сети
профессор

Зарегистрирован: Вс авг 31, 2014 12:11 am
Сообщений: 420
Благодарил (а): 50 раз.
Поблагодарили: 20 раз.
Пункты репутации: 10
LinXP, да. Это работает.
kvitaliy, флэшка-то моя, собственная.
В принципе все работает как надо. Хотел только оптимизировать (избавиться от бага с извлечением).

О другом: скажите, как преобразовать картинку в набор байтов, чтобы потом ее можно было записать в датасекцию?
и еще: Пётр, не могли бы Вы поправить свой код отсюда под pb511?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: пара-тройка мелких вопросов
СообщениеДобавлено: Пт апр 10, 2015 8:43 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6327
Благодарил (а): 19 раз.
Поблагодарили: 189 раз.
Пункты репутации: 48
knower писал(а):
флэшка-то моя, собственная.

Статистика говорит, что все вирусы на "своих" флешках и таскают, не на чужих же :D
Не зря в серьёзных организациях флешки вообще запрещены на программном уровне и приказном.
knower писал(а):
О другом: скажите, как преобразовать картинку в набор байтов, чтобы потом ее можно было записать в датасекцию?

Готовая программа и исходник ( правда на 4.01) в комплекте. Но не вижу в ней смысла - нет ни какого преимущества перед стандартным способом
Код:
1
2
3
4
5
6
7
8
CatchImage(0, ?Logo)
  End
 
  DataSection
    Logo:
      IncludeBinary "Logo.bmp"
  EndDataSection
 


Ну если только сжатие применить, но для этого опять же есть PNG или JPG.


Вложения:
BMP2Data.zip [19.92 KiB]
Скачиваний: 67

_________________
read-only
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB