Windows 多程序通訊API總結

2021-07-04 23:02:56 字數 2086 閱讀 5540

在乙個大型的應用系統中,往往需要多個程序相互協作,程序間通訊(ipc,inter process communication)就顯得比較重要了。在linux系統中,有很多種ipc機制,比如說,訊號(signal)、管道(pipe)、訊息佇列(message queue)、訊號量(semaphore)和共享記憶體(shared memory)、套接字(socket)等,其實windows作業系統也支援這些東西。在ibm的developerworks發現了一篇關於windows與linux 之間ipc機制api比較的文章,寫得很不錯,鏈結

下面大部分內容是關於這些機制的api的實現。

程序的建立可以呼叫createprocess函式,createprocess有三個重要的引數,執行程序的名稱、指向startupinfo結構的指標、指向process_information結構的指標。其原型如下:

bool createprocess

(lptstr lpcommandline,

lpsecurity_attributes lpprocessattributes。

lpsecurity_attributes lpthreadattributes,

bool binherithandles,

dword dwcreationflags,

lpvoid lpenvironment,

lpctstr lpcurrentdirectory,

lpstartupinfolpstartupinfo,

lpprocess_informationlpprocessinformation

);

給個例子,如果啟動時應用程式帶有命令列引數,程序將輸出命令列引數,並建立乙個不帶任何引數的子執行緒;如果不帶有任何引數,則會輸出一條提示訊息。

#include #include #include using namespace std;

int _tmain(int argc, _tchar* argv)

closehandle(writepipe);

return 0;

}unsigned int __stdcall stage2(void * param)

return 1;

} volatile long counter=2;

unsigned int __stdcall test(void *)

return 0;

} int _tmain(int argc,_tchar* argv)

執行緒本地分配可以呼叫__declspec、tlsalloc()等函式。tlsalloc可以分配全域性索引,該索引由所有執行緒共享,但是每個執行緒儲存在索引中的資料為呼叫的執行緒私有,也就是說其他執行緒看不到持有的值。當不再需要全域性索引提供執行緒本地儲存時,可以呼叫tlsfree來釋放全域性索引。

給個例子。

#include #include #include #include using namespace std;

dword tlsindex;

void setdata(int value)

{ cout<<"thread "《還有個問題,就是優先順序的問題。執行緒的優先順序越高,獲得的cpu資源(時間)就越多。在有些情況下,調整乙個應用程式中不同執行緒的優先順序會非常有用。比如說,當某個應用執行乙個長時間的後台任務時,為了保證機器的高響應性,這個後台任務最好以低優先順序執行。

windows作業系統中提供了相關的api。

#include #include #include #include #include using namespace std;

unsigned int __stdcall fastthread(void *data)

{ double d=1.0;

cout<<"fast thread started"<

有時候調整執行緒的優先順序會帶來優先順序反轉的問題。

主要實現了windows作業系統中ipc的api,主要有程序之間共享記憶體、子程序中繼承控制代碼、互斥量、管道、套接字等。此外,還有windows中的互鎖函式。執行緒本地化儲存(tls)、執行緒的優先順序等。

python多程序通訊

這是看書筆記 python提供了多種程序通訊的方式,比如說queue,pipe,value array等。其中queue主要用來在多個程序之間實現通訊。pipe常用來在兩個程序之間實現通訊。queue是多程序安全佇列,queue通過put和get方法來實現多程序之間的資料傳遞。put方法用於將資料插...

多程序TCP通訊

include include include include include include include include include intcreate worker int cli fd else if pid 0 int ret recv cli fd,buff,1024,0 if r...

python多程序通訊

python 多程序實現 from multiprocessing import import time import os class clockprocess process def init self,interval self.interval interval process.init s...