Trang 2 trên tổng số 3 Đầu tiênĐầu tiên 123 Cuối cùngCuối cùng
Từ 11 tới 20 trên tổng số 21 kết quả

Đề tài: Inter Process Communication - Share Memory Multi - Process

  1. #11
    Ngày gia nhập
    09 2008
    Bài viết
    15

    Mặc định Inter Process Communication - Share Memory Multi - Process

    Mình định chuyển dữ liệu giữa hai tiến trình thôi , mình tìm mấy tài liệu thì chưa thấy nó nói gì về việc đấy cả.
    Đừng sống theo điều ta mong muốn
    Hãy sống theo điều theo điều ta có thể

  2. #12
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Tìm trong MSDN, Interprocess communication. Các phương pháp giao tiếp mà Windows support:
    - Clipboard: đơn giản nhất
    - COM: rắc rối thêm
    - Data Copy = WM_COPYDATA, cũng đơn giản nhất
    - DDE: Xưa rồi
    - File Mapping: nhanh
    - Mailslots: được
    - Pipes: được
    - RPC: chậm
    - Windows Sockets: chậm
    Đã được chỉnh sửa lần cuối bởi TQN : 24-12-2008 lúc 09:25 PM.

  3. #13
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Hay dùng WM_COPYDATA nếu dùng chung trong 1 thread thì không tốt vì hàm SendMessage còn phải chờ copy. Nên tạo 1 thread riêng nếu sử dụng.

    Em có đọc về về File Mapping nhưng chưa thử bao giờ, có gì tối mò mai lên hỏi anh xem sao, ( đặc biệt là so sánh tốc độ vì trong cuốn sách nói là nếu dùng WM_COPYDATA thì không cần biết File Mapping )

    Edit: Rắc rối quá.
    Đã được chỉnh sửa lần cuối bởi kidkid : 25-12-2008 lúc 07:01 PM.

  4. #14
    Ngày gia nhập
    04 2008
    Bài viết
    244

    tất cả ở đây:
    Ref Links Code:
    Đã được chỉnh sửa lần cuối bởi honey : 19-08-2010 lúc 05:31 PM.

  5. #15
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Trên đó thiếu FileMapping rồi :
    Bạn làm thế này :

    Visual C++ Code:
    1. #include "stdafx.h"
    2. #include <windows.h>
    3. #include <stdio.h>
    4. #include <conio.h>
    5. #include <tchar.h>
    6. #pragma comment(lib,"user32.lib")
    7.  
    8. #define BUF_SIZE 256
    9. TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
    10. TCHAR szMsg[]=TEXT("Nothing else matter");
    11.  
    12. int _tmain()
    13. {
    14.    HANDLE hMapFile;
    15.    LPCTSTR pBuf;
    16.  
    17.    hMapFile = CreateFileMapping(
    18.                  INVALID_HANDLE_VALUE,    // use paging file
    19.                  NULL,                    // default security
    20.                  PAGE_READWRITE,          // read/write access
    21.                  0,                       // maximum object size (high-order DWORD)
    22.                  BUF_SIZE,                // maximum object size (low-order DWORD)  
    23.                  szName);                 // name of mapping object
    24.  
    25.    if (hMapFile == NULL)
    26.    {
    27.        _tprintf(TEXT("Khong ton tai mapped file: Ma Loi (%d).\n"),
    28.              GetLastError());
    29.       return 1;
    30.    }
    31.  
    32.    pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
    33.                FILE_MAP_ALL_ACCESS,  // read/write permission
    34.                0,                    
    35.                0,                    
    36.                BUF_SIZE);                  
    37.  
    38.    if (pBuf == NULL)
    39.    {
    40.        _tprintf(TEXT("Khong Map View File: Ma Loi (%d).\n"),
    41.              GetLastError());
    42.  
    43.       CloseHandle(hMapFile);
    44.  
    45.       return 1;
    46.    }
    47.  
    48.    
    49.    CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
    50.    printf("Press Any Key To End");
    51.     _getch();
    52.  
    53.    UnmapViewOfFile(pBuf);
    54.  
    55.    CloseHandle(hMapFile);
    56.  
    57.  
    58.  
    59.    return 0;
    60. }

    App2:

    Visual C++ Code:
    1. // AccessProcess.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. #include <windows.h>
    6. #include <stdio.h>
    7. #include <conio.h>
    8. #include <tchar.h>
    9. #pragma comment(lib, "user32.lib")
    10.  
    11. #define BUF_SIZE 256
    12. TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
    13.  
    14. int _tmain()
    15. {
    16.    HANDLE hMapFile;
    17.    LPCTSTR pBuf;
    18.  
    19.    hMapFile = OpenFileMapping(
    20.                    FILE_MAP_ALL_ACCESS,   // read/write access
    21.                    FALSE,                 // do not inherit the name
    22.                    szName);               // name of mapping object
    23.  
    24.    if (hMapFile == NULL)
    25.    {
    26.        _tprintf(TEXT("Khong ton tai mapped file: Ma Loi (%d).\n"),
    27.              GetLastError());
    28.       return 1;
    29.    }
    30.  
    31.    pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object
    32.                FILE_MAP_ALL_ACCESS,  // read/write permission
    33.                0,                    
    34.                0,                    
    35.                BUF_SIZE);                  
    36.    if (pBuf == NULL)
    37.    {
    38.        _tprintf(TEXT("Khong Map View File: Ma Loi (%d).\n"),
    39.              GetLastError());
    40.       CloseHandle(hMapFile);
    41.       return 1;
    42.    }
    43.  
    44.    MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
    45.     // Delete
    46.    ZeroMemory((PVOID)pBuf,BUF_SIZE);
    47.    TCHAR fillMsg[] = TEXT("DELETED");
    48.    CopyMemory((PVOID) pBuf, fillMsg,(_tcslen(fillMsg)*sizeof(TCHAR)));
    49.    _tprintf(L"Press Any Key To End Process");
    50.    getch();
    51.  
    52.    UnmapViewOfFile(pBuf);
    53.  
    54.    CloseHandle(hMapFile);
    55.  
    56.  
    57.  
    58.    return 0;
    59. }

    Vấn đề còn lại là bạn tự giải thích Global ? Tại sao chỗ này là Global ? Nếu không có có được không ? Nếu không tại sao ? Nếu được trong trường hợp nào ? Oh J. ( Câu này của anh TQN hỏi lại).

  6. #16
    Ngày gia nhập
    01 2008
    Bài viết
    240

    Mặc định Inter Process Communication - Share Memory Multi - Process

    chủ đề này rất hay, ai có thể tóm tắt thành bài giảng nói cho anh em được không?
    mình cũng đang tìm hiểu chủ đề này, xong còn lơ mơ lắm
    Time

  7. #17
    Ngày gia nhập
    09 2009
    Bài viết
    3

    Cái này trong MSDN 2001 có ví dụ cụ thể rồi mà. Bạn có thể search Shared memory trong đấy là ra. Nói chung là shared memory dùng là đơn giản và nhanh. Bác nào dùng socket thì khủng quá

  8. #18
    Ngày gia nhập
    11 2008
    Bài viết
    84

    socket thì cơ chế nó giống hệt với chường trình chát trong mạng LAN mà ai cũng được học í

  9. #19
    Ngày gia nhập
    12 2010
    Nơi ở
    Thiếu Thất
    Bài viết
    143

    Trích dẫn Nguyên bản được gửi bởi C&C++ Xem bài viết
    socket thì cơ chế nó giống hệt với chường trình chát trong mạng LAN mà ai cũng được học í
    từ cơ chế đến chương trình hoàn thiện cũng như từ lý thuyết đến thực tiễn vậy bạn ạ, có một khoảng cách khá xa đấy.
    Các anh cho em hỏi 1 chút: giả sử ta có 2 tiến trình A và B. em muốn A thực hiện xong thì B mới được thực hiện thì phải làm thế nào ạ?

  10. #20
    Ngày gia nhập
    07 2011
    Bài viết
    18

    Trích dẫn Nguyên bản được gửi bởi jumona Xem bài viết
    từ cơ chế đến chương trình hoàn thiện cũng như từ lý thuyết đến thực tiễn vậy bạn ạ, có một khoảng cách khá xa đấy.
    Các anh cho em hỏi 1 chút: giả sử ta có 2 tiến trình A và B. em muốn A thực hiện xong thì B mới được thực hiện thì phải làm thế nào ạ?
    Trong chương trình A,khi close thì trước đó bạn gọi chương trình B ra .. ý bạn là vậy à

Các đề tài tương tự

  1. Kỹ thuật C Cách nào để chia sẻ memory giữa các process
    Gửi bởi s4all1910 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 3
    Bài viết cuối: 28-11-2013, 10:18 PM
  2. [Linux API] Hướng Dẫn Kỹ Thuật Inter Process Memory và semaphore Nhiều Process
    Gửi bởi AlexF trong diễn đàn Thủ thuật, Tutorials và Mã nguồn
    Trả lời: 0
    Bài viết cuối: 21-04-2011, 11:06 PM
  3. Inter Process Communication Trên windows / Linux
    Gửi bởi yoinb trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 8
    Bài viết cuối: 01-03-2011, 01:28 AM
  4. Inter Process Communication Trên windows / Linux
    Gửi bởi yoinb trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 16-04-2010, 09:56 PM
  5. Inter Process Communication - Share Memory Multi - Process
    Gửi bởi yaiba_forever trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 13
    Bài viết cuối: 25-12-2008, 09:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn