On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение





Пост N: 329
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 13.10.13 22:54. Заголовок: Почему CTRL-BREAK срубает Harbour ?


В процессе расследования "необъяснимых" вылетов программы родилась мысль: при запуске программы запускать вторую ее копию. Это чтобы не муздыкаться с батниками, всякими loader.exe и прочими вариантами на множестве рабочих мест.

Первая копия дожидается завершения второй копии, сохраняет содержимое экрана в лог и завершает работу, как ни в чем не бывало.
Во время "домашнего" тестирования всё работало прекрасно, пока я не наткнулся на комбинацию кнопок CTRL-BREAK.

Мало того, что ей чихать на установку SETCANCEL(FALSE), так еще получается, что вырубаются оба приложения: и родительское и вторая его копия. Т.е. копия экрана не создается ни при каких условиях, если в вызванном приложении нажата эта комбинация...

Простой пример:

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]





Пост N: 948
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.13 08:37. Заголовок: Хотел протестировать..


Хотел протестировать, но получил
d:/tmp/hbmk_8ecjyv.dir/serg.o:serg.c:(.data+0x88): undefined reference to `HB_FUN_DOSPARAM'
d:/tmp/hbmk_8ecjyv.dir/serg.o:serg.c:(.data+0xa8): undefined reference to `HB_FUN_EXENAME'
d:/tmp/hbmk_8ecjyv.dir/serg.o:serg.c:(.data+0x88): undefined reference to `HB_FUN_STRFILE'
d:/tmp/hbmk_8ecjyv.dir/serg.o:serg.c:(.data+0xe8): undefined reference to `HB_FUN_CHARODD'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: d:/tmp/hbmk_8ecjyv.dir/serg.o: bad reloc address 0xf in section `.text.startup'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

Давайте начинать с самодостаточных примеров, скомпилил, запустил, посмотрел результат, а уж потом добавлять другие ф-и.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 330
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 10:19. Заголовок: Эти функции из Clipe..


Эти функции из Clipper Tools, ныне hbct.
Я обычно все свои примеры компилирую так: hbmk2 test.prg -prgflag=/v d:\harbour\contrib\hbct\hbct.hbc, поэтому забыл.

Сорри.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 949
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.13 10:45. Заголовок: Собирать можно так h..


Собирать можно так hbmk2 test.prg -prgflag=/v hbct.hbc
Под терминалом gtwvt тестировали?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3626
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.13 10:54. Заголовок: AlexMyr пишет: Под ..


AlexMyr пишет:

 цитата:
Под терминалом gtwvt тестировали?


Под ним нет такого эффекта.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 331
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 11:00. Заголовок: AlexMyr пишет: Соби..


AlexMyr пишет:

 цитата:
Собирать можно так hbmk2 test.prg -prgflag=/v hbct.hbc
Под терминалом gtwvt тестировали?


Работаю под GTWIN.
Знаю о "вкусностях" второго терминала, но хочу для начала полностью перейти с Clipper на Harbour - сделать стабильное и надежное приложение. После чего заняться апгрейдом программы на полную катушку.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 950
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.13 11:16. Заголовок: Заменил RUN на hb_pr..


Заменил RUN на hb_processRun, стал появляться screen.log

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 332
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 11:51. Заголовок: AlexMyr пишет: Заме..


AlexMyr пишет:

 цитата:
Заменил RUN на hb_processRun, стал появляться screen.log


У меня нет пока возможности проверить, скажите пожалуйста: в логе есть Harbour сообщение "Cancelled at ..." и стек вызовов (как обычно) ?
Alert появляется ?
Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 951
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.13 11:56. Заголовок: Вот что в screen.log..


Вот что в screen.log

 
────────────────────── Screen capture: 10/14/13 11:54:48 ───────────────────────
C:\prg_hrb\test\sergy\>serg.exe
────────────────────────────────────────────────────────────────────────────────


Sergy пишет:

 цитата:
Alert появляется ?

Да.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 333
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 12:20. Заголовок: AlexMyr пишет: Вот ..


AlexMyr пишет:

 цитата:
Вот что в screen.log


────────────────────── Screen capture: 10/14/13 11:54:48 ───────────────────────
C:\prg_hrb\test\sergy\>serg.exe
────────────────────────────────────────────────────────────────────────────────


У меня получилось аналогично.
Все хорошо, но где содержимое экрана ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 952
Зарегистрирован: 11.06.10
ссылка на сообщение  Отправлено: 14.10.13 12:22. Заголовок: Sergy пишет: Все хо..


Sergy пишет:

 цитата:
Все хорошо, но где содержимое экрана ?

валится вторая задача, потому содержимое первого экрана.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 334
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 12:33. Заголовок: AlexMyr пишет: вали..


AlexMyr пишет:

 цитата:
валится вторая задача, потому содержимое первого экрана.


Тут я не очень понимаю.
Почему тогда на экране строки "Hello world" видны (в момент Alert()), а SAVESCREEN вызывашей задачи не может их забрать к себе ?
Почему он может это сделать, если не был нажат CTRL-BREAK ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 3627
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.10.13 14:12. Заголовок: Sergy пишет: Почему..


Sergy пишет:

 цитата:
Почему он может это сделать, если не был нажат CTRL-BREAK ?


При нажатии любой клавиши снимок экрана так же пуст и все после замены RUN на hb_processRun.
Оно как бы и понятно почему , так как hb_processRun выполняется в отдельном окне.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 335
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 14:36. Заголовок: Dima пишет: При наж..


Dima пишет:

 цитата:
При нажатии любой клавиши снимок экрана так же пуст и все после замены RUN на hb_processRun.


+1
Обнаружил тоже самое.

 цитата:
Оно как бы и понятно почему , так как hb_processRun выполняется в отдельном окне.


А вот это - не очень понятно.
У меня все четко, один процесс запускает другой:



Только в случае с "обычным" RUN() или __Run() между двумя задачами возникает прослойка в виде cmd.exe

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 336
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 17:50. Заголовок: Сделал так: ------..


Сделал так:

Скрытый текст


Что получается: если вызывать программу через RUN() - CTRL-BREAK рубит все подряд.
Если вызывать два экзешника через батник - появляется вопрос: "Завершить выполнение бат-файла [Да/нет]?" и в зависимости от результата, экран сохраняется или нет.
Если вызывать через HB_ProcessRun() - все работает ок. Пофигу, какие кнопки нажаты.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 338
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 18:02. Заголовок: Сделал так: loader...


Сделал так:

loader.prg:

 
FUNC Main()

HB_ProcessRUN("i2test.exe")
STRFILE(CHARODD(SAVESCREEN()),"loader.!!!") // тест
HB_ProcessRUN("i2test.exe /save")

RETURN

Почему так получается, что из программы loader.exe SAVESCREEN "не видит" содержимого экрана (loader.!!! пустой, там только c:\path\loader.exe внизу), а из другого процесса - все ок ???


А если сделать в loader.prg так:
FUNC Main() 

IF "/save" $ DOSPARAM()
STRFILE(CHARODD(SAVESCREEN()),"loader.!!!") // сохраняем в другой файл, чтобы не путать
ELSE
HB_ProcessRUN("i2test.exe") // рисуем на экране что угодно
HB_ProcessRUN("loader.exe /save") // сохраняем вызовом самих себя
ENDIF
RETURN

то получается, что экран легко сохраняется.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 339
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 14.10.13 18:24. Заголовок: Вот так все работает..


Вот так все работает, пофиг на CTRL-BREAK, только мне совсем непонятно, почему...

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 331
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет