歡迎關注微博:
前面已經寫了使用wm_copydata訊息來完成程序之間的通訊
1.《程序通訊之一使用wm_copydata c++及c#實現》
然後用了三篇文章來講解如何使用管道技術來完成程序通訊功能。
1.《程序通訊之二
管道技術第一篇
輸入輸出的重定向
》2.《程序通訊之二
管道技術第二篇
匿名管道
》3.《程序通訊之二
管道技術第三篇
命名管道
》本篇介紹乙個簡單而又實用的程序通訊方式——父程序向子程序傳入引數並獲取子程序返回值。這個非常簡單:
1.父程序向子程序傳入引數可以由createprocess()函式來完成,注意子程序是通過getcommandline
()來獲取這個引數而且不是
char *argv。2
.父程序要獲取子程序的返回值可以在等待子程序結束後通過
getexitcodeprocess
並傳入子程序控制代碼來獲取子程序中
main
或winmain
函式的返回值。
下面就結出例項**,首先來看子程序的程式**:
//程序通訊之三 父程序傳引數與子程序返回值
////by morewindows( )
#include #include #include #include #include int main(int argc, char *argv)
然後是父程序的程式**,**中的
adjustprocesscurrentdirectory();
函式可以參考《
windows vc++
調整程序當前目錄為程式可執行檔案所在目錄》(
):
//程序通訊之三 父程序傳引數與子程序返回值
////by morewindows( )
#include #include #include #include // 啟動子程序並傳入引數,等待子程序結束後獲取其返回值。
bool getchildproces***itcode(const char *pstrchildproces***efilename,
char *pstrconmandline,
dword *pdwexitcode, bool fhide = true)
int main()
getch();
return 0;
}
程式執行結果如下:
歡迎關注微博:
父程序與子程序管道
int main else return 0 先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端,這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所...
子程序與父程序的簡單應用
示例 在單核處理器裡,絕對的多程序是不存在的,那為什麼大家說也有多程序的存在,單核處理器的多程序實際上使用時間分配的概念做的,如果有同時有幾個程式要跑,那麼處理器就去分配一下。不是絕對的,大家一起執行,多核處理器的程序一般是絕對的,就是大家一起跑。同時進行。為什麼要有用多程序,使用多程序能更好的提高...
SIGCHLD訊號與父程序非同步等待子程序
阻塞式等待 函式,當然waitpid函式當其第三個引數不為 時也是阻塞式等待。非阻塞式等待 輪詢的方式 當waitpid函式當其第三個引數為 是非阻塞式等待。父程序可以阻塞等待子程序結束,也可以非阻塞地查詢是否有子程序結束等待清理 也就是輪詢的方式 若採用阻塞等待方式,父程序就不能處理自己的工作了 ...