> Собственно, нужно из основной программы создать еще один > процесс и > заслать его в бэкграунд (но так чтобы он глобальную область > переменных видел). Я читал, что в WinAPI32 это вроде > функция > CreateProcess(...) делает. А вот в 16р не нашел > чего-то...Может плохо искал.
для 16-битника - это WinExec, это я помню точно.
но навряд ли он разрешит разделять глобальные переменные, хотя для 16-бит это не проблема. для этой цели лучше объявить их в dll-ке. затем использовать маппинг.
но лучше, если тебе всего лишь нужен бакграунд работа, используй потоки, оды и переменные будут общими.
а подробнее узнай об этом в Help старых версиях С++
Собственно, нужно из основной программы создать еще один процесс и
заслать его в бэкграунд (но так чтобы он глобальную область переменных видел). Я читал, что в WinAPI32 это вроде функция
CreateProcess(...) делает. А вот в 16р не нашел чего-то...Может плохо искал.
А есть ли аналог fork() в Win16 Application?04.06.01 20:48 Автор: kabanchik Статус: Незарегистрированный пользователь
> Собственно, нужно из основной программы создать еще один > процесс и > заслать его в бэкграунд (но так чтобы он глобальную область > переменных видел). Я читал, что в WinAPI32 это вроде > функция > CreateProcess(...) делает. А вот в 16р не нашел > чего-то...Может плохо искал.
для 16-битника - это WinExec, это я помню точно.
но навряд ли он разрешит разделять глобальные переменные, хотя для 16-бит это не проблема. для этой цели лучше объявить их в dll-ке. затем использовать маппинг.
но лучше, если тебе всего лишь нужен бакграунд работа, используй потоки, оды и переменные будут общими.
а подробнее узнай об этом в Help старых версиях С++
А нету! 05.06.01 11:37 Автор: prop Статус: Незарегистрированный пользователь
> > Собственно, нужно из основной программы создать еще > один > > процесс и > > заслать его в бэкграунд (но так чтобы он глобальную > область > > переменных видел). Я читал, что в WinAPI32 это вроде > > функция > > CreateProcess(...) делает. А вот в 16р не нашел > > чего-то...Может плохо искал. > > для 16-битника - это WinExec, это я помню точно. > но навряд ли он разрешит разделять глобальные переменные, > хотя для 16-бит это не проблема. для этой цели лучше > объявить их в dll-ке. затем использовать маппинг. > но лучше, если тебе всего лишь нужен бакграунд работа, > используй потоки, оды и переменные будут общими. > а подробнее узнай об этом в Help старых версиях С++
Если я правильно помню, fork() порождает копию вызывающего процесса и начинает его выполнение со следующей за fork() команды.
В win16 используется корпоратиная многозадачность - нет ни процессов, ни потоков (в привычном смысле) - есть один процесс и один поток - все остальное - т. наз. задачи, которые получают сообщения, что-то делают, и возвращают управление. Не вернул управление - все остальные таски висят. С глобальными переменными проблем нет - global heap один на всю систему, поэтому указатель действителен во всех задачах.
А если маппинг это CreateFileMapping - то его в Win16 тоже нет.
Может я и наврал чего - давно это было...
А нету! 05.06.01 15:37 Автор: Xan Статус: Незарегистрированный пользователь
> > > Собственно, нужно из основной программы создать > еще > > один > > > процесс и > > > заслать его в бэкграунд (но так чтобы он > глобальную > > область > > > переменных видел). Я читал, что в WinAPI32 это > вроде > > > функция > > > CreateProcess(...) делает. А вот в 16р не нашел > > > чего-то...Может плохо искал. > > > > для 16-битника - это WinExec, это я помню точно. > > но навряд ли он разрешит разделять глобальные > переменные, > > хотя для 16-бит это не проблема. для этой цели лучше > > объявить их в dll-ке. затем использовать маппинг. > > но лучше, если тебе всего лишь нужен бакграунд работа, > > используй потоки, оды и переменные будут общими. > > а подробнее узнай об этом в Help старых версиях С++ > > Если я правильно помню, fork() порождает копию вызывающего > процесса и начинает его выполнение со следующей за fork() > команды. > В win16 используется корпоратиная многозадачность - нет ни > процессов, ни потоков (в привычном смысле) - есть один > процесс и один поток - все остальное - т. наз. задачи, > которые получают сообщения, что-то делают, и возвращают > управление. Не вернул управление - все остальные таски > висят. С глобальными переменными проблем нет - global heap > один на всю систему, поэтому указатель действителен во всех > задачах. > А если маппинг это CreateFileMapping - то его в Win16 тоже > нет. > Может я и наврал чего - давно это было...
Понял, спасибо всем. И все-таки глупый вопрос.
А если я прость из WinMain() создам дочернее окно с помощью CreateWindow ну например как инвизибл или с нулевыми размерами. Понятно что оно не есть копия процесса, но для моих целей пойдет??? ( будет невидимым и зрячим на global heap).
<без заголовка>05.06.01 16:20 Автор: XR <eXtremal Research> Статус: The Elderman
Понял, спасибо всем. И все-таки глупый вопрос.
> А если я прость из WinMain() создам дочернее окно с помощью > CreateWindow ну например как инвизибл или с нулевыми > размерами. Понятно что оно не есть копия процесса, но для > моих целей пойдет??? ( будет невидимым и зрячим на global > heap). Нет это из другой оперы.
Понятно что аналога fork() в Win16 нет ...есть WinExec(),
если хочешь поиметь совместный доступ к каким то переменным из многих
копий программы - сделай как рекомендовал kabanchik
а именно - создай DLL в которой обявлены все твои глобальные переменные а
потом экспортируй их. Потом загрузи DLL в своем exe и импортируй энти переменные ... подробности ищи в описании *.def файлов в хелпах для Win16
Но лучше конечно забить на "многоздачный, коопедаративный" динозавр - 16-бит :-)))05.06.01 17:00 Автор: kabanchik Статус: Незарегистрированный пользователь
> > > Собственно, нужно из основной программы создать > еще > > один > > > процесс и > > > заслать его в бэкграунд (но так чтобы он > глобальную > > область > > > переменных видел). Я читал, что в WinAPI32 это > вроде > > > функция > > > CreateProcess(...) делает. А вот в 16р не нашел > > > чего-то...Может плохо искал. > > > > для 16-битника - это WinExec, это я помню точно. > > но навряд ли он разрешит разделять глобальные > переменные, > > хотя для 16-бит это не проблема. для этой цели лучше > > объявить их в dll-ке. затем использовать маппинг. > > но лучше, если тебе всего лишь нужен бакграунд работа, > > используй потоки, оды и переменные будут общими. > > а подробнее узнай об этом в Help старых версиях С++ > > Если я правильно помню, fork() порождает копию вызывающего > процесса и начинает его выполнение со следующей за fork() > команды. > В win16 используется корпоратиная многозадачность - нет ни > процессов, ни потоков (в привычном смысле) - есть один > процесс и один поток - все остальное - т. наз. задачи, > которые получают сообщения, что-то делают, и возвращают > управление. Не вернул управление - все остальные таски > висят. С глобальными переменными проблем нет - global heap > один на всю систему, поэтому указатель действителен во всех > задачах. > А если маппинг это CreateFileMapping - то его в Win16 тоже > нет. > Может я и наврал чего - давно это было...
Это вероятно сильно развитая кооперативная многозадачность ... то есть когда кооператив "рога и копыта" вырастает до размеров корпорации "Золотой теленок" :)))))05.06.01 15:18 Автор: XR <eXtremal Research> Статус: The Elderman