изменять лишь форму представления данных
К gnuplot есть С++ API
- // blah-declaration.h
- #ifndef BLAH_DECLARATION_H
- #define BLAH_DECLARATION_H
- // Объявляем тип
- struct blah;
- // Объявляем переменную, указав, что она определена в другом месте
- // (Поскольку в данной точке мы имеем НЕ полное определение типа,
- // объявляем указатель - это всё, что возможно сделать)
- extern struct blah* blah_test;
- #endif
- // -----------------------------
- // blah-definition.h
- #ifndef BLAH_DEFINITION_H
- #define BLAH_DEFINITION_H
- // Определяем тип
- struct blah
- {
- int value;
- };
- #endif
- // -----------------------------
- // blah.cpp
- #include "blah-definition.h"
- // Определяем переменную
- struct blah* blah_test = new struct blah;
- // -----------------------------
- // main.cpp
- // Заголовочные файлы - для удобства
- #include "blah-definition.h"
- #include "blah-declaration.h"
- // на самом деле мы можем снова всё написать
- //struct blah
- //{
- // int value;
- //};
- //
- //extern struct blah* blah_test;
- int main(int argc, char* argv[])
- {
- // Используем
- blah_test->value = 0;
- delete blah_test;
- blah_test = NULL;
- return 0;
- }
Почему это? Есть один объект, процессы пытаются завладеть им поочередно, если родитель завершится — ребенок просто регулярно будет овладевать этим объектом, и всё.
// родительский процесс
// открываем event, пытаемся открыть до тех пор, пока не получится
HANDLE hCanReadEvent = NULL;
do
{
::Sleep(100);
hCanReadEvent = ::OpenEvent(...);
}while(hCanReadEvent == NULL);
// ожидаем
::WaitForSingleObject(hCanReadEvent, INFINITE);
// допустим WaitForSingleObject успешно завершилась,
// имеем доступ к файлу, читаем его
// оповещать дочерний процесс о том, что мы прочитали и он может снова писать ?
// если да, то как ? - через event ? - если через event, то дочерний процесс
// должен ждать ? а если должен ждать, то может не дождаться, так как родительский
// процесс может завершиться, и event будет в несигнальном состоянии - дочерний процесс
// никогда не завершиться
Messages sent by PostThreadMessage are not associated with a window. As a general rule, messages that are not associated with a window cannot be dispatched by the DispatchMessage function. Therefore, if the recipient thread is in a modal loop (as used by MessageBox or DialogBox), the messages will be lost. To intercept thread messages while in a modal loop, use a thread-specific hook.
The system only does marshalling for system messages (those in the range 0 to (WM_USER-1)). To send other messages (those >= WM_USER) to another process, you must do custom marshalling.
Хотя, честно говоря, я не понимаю как родительский может заставить ждать дочерний очень долго, ведь цена вопроса — залочить ресурс, считать несчастных 8 байт и вернуть ресурс обратно.
for(int i = 0; i <= 100; ++i)
{
CopyMemory(pBuf, &i, sizeof(i));
}