C IPC程序間的通訊《C 多執行緒程式設計實戰》

2021-09-10 13:44:05 字數 3205 閱讀 8831

程序間通訊示例:程式一開始就有2個程序,它們在乙個普通視窗中完成繪製矩形的任務。2個程序相互通訊,乙個程序再畫矩形時,另乙個程序要等待

#include #include //_tcscmp() _tchar*

#define synchronizing_mutex_name text("__test_mutex__")

typedef struct _tagcommunicationobject

communicationobject, *pcommunicationobject;

int main(int argc, _tchar* ar**)

else

hwnd hwnd = null;

hdc hdc = null;

rect rectclient = ;

long lwaittimeout = 0;

pcommunicationobject pcommobject = null;

bool bcontinueloop = true;

//openmutex獲得該已命名互斥量的控制代碼(如果有的話)

handle hmutex = openmutex(mutex_all_access, false, synchronizing_mutex_name);

releasedc(hwnd, hdc);

sleep(lwaittimeout); //故意的,因為記錄的時候,程序切換太快根本注意不到

}releasemutex(hmutex); //釋放互斥量的所有權,讓其它程序可以獲得互斥量,繼續執行其他任務

} }closehandle(hmutex);

deleteobject(hbrush);

return 0;

}

#include #include #include // _tchar*

using namespace std;

#define synchronizing_mutex_name text( "__test_mutex__" )

#define window_class_name text( "__tmpwndclass__" )

#define button_close 100

typedef struct _tagcommunicationobject //用於整個檔案對映過程中物件之間的通訊

communicationobject, *pcommunicationobject;

lresult callback wndproc(hwnd hdlg, uint umsg, wparam wparam, lparam lparam);

hwnd initializewnd();

pcommunicationobject pcommobject = null;

int _tmain(int argc, _tchar* ar**)

handle hmutex = createmutex(null, false, synchronizing_mutex_name);

if (!hmutex)

sizeof(communicationobject), communication_object_name);

file_map_write, 0, 0, 0);

if (pcommobject)

startupinfo startupinfored = ;

process_information processinformationred = ;

startupinfo startupinfoblue = ;

process_information processinformationblue = ;

bool bsuccess = createprocess(text("..\\debug\\ipcworker.exe"),

(lpwstr)text("red"), null, null, false, 0, null, null, &startupinfored,

&processinformationred);

if (!bsuccess)

bsuccess = createprocess(text("..\\debug\\ipcworker.exe"),

(lpwstr)text("blue"), null, null, false, 0, null, null, &startupinfoblue,

&processinformationblue);

if (!bsuccess)

msg msg = ;

while (getmessage(&msg, null, 0, 0))

unregisterclass(window_class_name, getmodulehandle(null));

closehandle(hmutex);

cout << "end program." << endl;

return 0;

}lresult callback wndproc(hwnd hwnd, uint umsg, wparam wparam, lparam lparam)

default:

break;

} break;

} case wm_destroy:

postquitmessage(0);

break;

} default: }

return 0;

}hwnd initializewnd()

hwnd hwnd = createwindow(wndex.lpszclassname,

text("interprocess communication demo"),

wndex.hinstance, null);

if (!hwnd)

hwnd hbutton = createwindow(text("button"), text("close"),

ws_child | ws_visible | bs_pushbutton | ws_tabstop,

275, 225, 100, 25, hwnd, null, wndex.hinstance, null);

showwindow(hwnd, sw_show);

updatewindow(hwnd);

return hwnd;

}

C IPC通道程序間通訊

有乙個解決方案,其中包括乙個windows服務和乙個windows應用程式,兩者之間需要進行通訊。查了下,可以使用多種方法,如web service 適用於不同系統及跨平台情況 net remoting 訊息佇列 wcf 整合了前述方法的功能,但太新,不支援windows2000及以前的系統 其中r...

VC 多執行緒 程序間通訊

郵槽是windows系統提供的一種單向通訊的機制,郵槽能傳輸的資料非常小,一般在400k左右。建立郵槽 handle createmailslot lpctstr lpname,指定郵件槽的名字,如 mailslot path name,小數點表示伺服器為本的機器 不能為遠端計算機建立郵件槽 dwo...

程序間通訊與多執行緒同步

常見的程序間通訊方式包括 管道 pipe 共享記憶體 sharedmemory 訊息佇列 messagequeue 訊號量 semaphore socket 套接字 常見的多執行緒同步方式主有 是臨界區 critical section 互斥鎖 mutex 訊號量 semaphore 事件 even...