powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (vfp) different process
7 сообщений из 7, страница 1 из 1
(vfp) different process
    #32950391
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые!!! У фокса есть проблема(по-моему)- она(лиса) не умеет делать несколько процессов(т.е. запускать отдельный процесс из одного своего приложения).

Задача. Есть приложение, а вней процедуры, которые выполняются долго.
Когда запускается эта процедура, все приложения ждет окончания. Хотелось бы, чтобы пользователь пока пользовался другими возможностями приложения.
И еще, чтобы эта процедура могла в нужный ей момент спросить пользователя кое о чем(callback вызовы в С++).
Как вы деумаете эта задача решится через фоксовские com (предварительно приготовленные)? Com будет сидеть на том же стеке? (т.е. in-process или out-process).... Короче, вы меня поняли...

Почему до сих пор нет этого в фоксе (у меня VFP9)?
...
Рейтинг: 0 / 0
(vfp) different process
    #32952375
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Ilhom_uz!

http://www.geocities.com/rremus/multithreaded_vfp.htm

Это по потокам. А процессы разные он и так может создавать - по !/RUN,
ShellExecute, CreateProcess и т.п. И общаться с ними через NamedPipes
например... Хотя многоПРОЦЕССНЫХ приложения я не встречал, вот
многопоточных - тех хватает.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
(vfp) different process
    #32952450
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Игорь Королев
Вы не могли бы подробней описать шаги работы с namedpipe (т.е. кодоа никакого не неадо, просто шаги). Опишите принцип работы через namedpipe.
...
Рейтинг: 0 / 0
(vfp) different process
    #32954579
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Ilhom_uz!

Не ломает описывать - почитай MSDN там много всего есть интересного и полезного.
А вот пример (код т.е.) наоборот имеется:

=========Beginning of the Pipe Server.prg==============
#DEFINE STANDARD_RIGHTS_REQUIRED 0xF0000
#DEFINE PIPE_ACCESS_OUTBOUND 0x00000002
#DEFINE FILE_FLAG_OVERLAPPED 0x40000000
#DEFINE PIPE_TYPE_BYTE 0x00000000
#DEFINE ERROR_PIPE_CONNECTED 535

DECLARE INTEGER GetLastError IN kernel32

DECLARE INTEGER CreateNamedPipe IN kernel32;
STRING lpName, INTEGER dwOpenMode, INTEGER dwPipeMode,;
INTEGER nMaxInstances, INTEGER nOutBufferSize, INTEGER nInBufferSize,;
INTEGER nDefaultTimeOut, INTEGER

DECLARE INTEGER ConnectNamedPipe IN kernel32;
INTEGER hNamedPipe, INTEGER lpOverlapped

DECLARE INTEGER CloseHandle IN kernel32 INTEGER hObject

DECLARE INTEGER WriteFile IN kernel32 INTEGER hFile,;
STRING lpBuffer, INTEGER nBt2Write, INTEGER @ lpBtWritten, INTEGER lpOverlapped
pipehnd = CreateNamedPipe("\\.\pipe\PPing", PIPE_ACCESS_OUTBOUND, PIPE_TYPE_BYTE, 1, 0, 0, 0, 0)
If pipehnd = 0
= CloseHandle(pipehnd)
MESSAGEBOX("Error1")
CLEAR DLLS
RETURN
ENDIF
m.res = ConnectNamedPipe(pipehnd, 0)
If m.res <> 0 .Or. (res = 0 And GetLastError() = ERROR_PIPE_CONNECTED)
m.buffer = ALLTRIM(STR(100)) && на будущее
m.lenbuf = LEN(m.buffer)
m.written = 0
m.res = WriteFile(pipehnd, m.buffer, m.lenbuf, @m.written, 0)
? m.written
Else
= CloseHandle(pipehnd)
MESSAGEBOX("Error2")
CLEAR DLLS
RETURN
ENDIF
MESSAGEBOX("Ok!")
= CloseHandle(pipehnd)
CLEAR DLLS
=========The end of the Pipe Server.prg================

=========Beginning of the Pipe Client.prg==============
DECLARE INTEGER CreateFile IN WIN32API ;
STRING, INTEGER, INTEGER, INTEGER, ;
INTEGER, INTEGER, INTEGER

DECLARE INTEGER ReadFile IN WIN32API ;
INTEGER, STRING @, INTEGER, INTEGER @, INTEGER

DECLARE INTEGER CloseHandle IN WIN32API INTEGER

#DEFINE GENERIC_READ 0x80000000
#DEFINE OPEN_EXISTING 3

lnHandle = CreateFile("\\.\pipe\PPing", GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
IF m.lnhandle = 0
MESSAGEBOX("Can't open pipe")
RETURN .F.
ENDIF
lcBuf = SPACE(255)
lnRead = 0
IF ReadFile(m.lnHandle, @m.lcBuf, LEN(m.lcBuf), @m.lnRead, 0) = 0
MESSAGEBOX("No data in pipe")
CloseHandle(m.lnHandle)
RETURN .F.
ENDIF
MESSAGEBOX(TRANSFORM(m.lnRead) + " bytes read from the pipe" + CHR(13) + ;
"Read data follows:" + LEFT(m.lcBuf, m.lnRead))

CloseHandle(m.lnHandle)
RETURN .T.
=========The end of the Pipe Client.prg================

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
(vfp) different process
    #32954625
Ilhom_uz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Королев!!! Просто нет слов. Все предельно ясно. Теперь можно изучать про pipe, потому что ясно для чего оно нужно...
Один вопрос: После перезагрузки компа, pipe исчезнет?Т.е. сервер поместил инфу в pipe и комп перезагрузили...

> Хотя многоПРОЦЕССНЫХ приложения я не встречал, вот
многопоточных - тех хватает.
А в фоксе это(открыть поток) можно проделать?
...
Рейтинг: 0 / 0
(vfp) different process
    #32954649
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еше один поток для интерпретатора
...
Рейтинг: 0 / 0
(vfp) different process
    #32956932
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Ilhom_uz!

> Один вопрос: После перезагрузки компа, pipe исчезнет?

Pipe это временный ресурс - он не только при перезагрузке исчезнет, он заметно раньше исчезнет :)

> А в фоксе это(открыть поток) можно проделать?

См. первое сообщение и инфу по линку.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (vfp) different process
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]