poco中的程序使用的糾結

2021-06-23 01:25:20 字數 1510 閱讀 3494

poco中的程序建立給予了很方便的介面:

std::string cmd("test.exe");  

std::vectorargs;

poco::processhandle ph = process::launch(cmd, args);

只要給出檔名和命令列引數(乙個vector,內容可為空),即可建立程序執行.

這個介面有個特點:

static processhandle launch(

const std::string & command, //命令列命令,即檔名

const args & args, //命令的引數

const std::string & initialdirectory, //在該目錄下建立程序

pipe * inpipe, //該程序標準輸入流

pipe * outpipe, //該程序標準輸出流

pipe * errpipe, //該程序標準錯誤輸出流

const env & env

);

這是該介面完整的形式,其它過載最後都會把其它引數用預設值填上.

對於最後三個引數,該介面允許把新建立的子程序的三個標準流重定向到另乙個流中,這個流可以是c++的任意輸入輸出流,即可以重定向到父程序建立的流中,通過一些庫,甚至可以把網路也做為乙個流,這是乙個很有意思的功能,子程序可以很方便的與父程序進行通訊,

但是這個重定向卻有乙個不能讓人接受的地方:它肯定會重定向到父程序中...

當沒有指定重定向時,如果父程序本身有控制台,則自動重定向到該控制台,即使父程序沒有控制台,他也會利用getconsolewindow函式獲取父程序控制台的控制代碼,即使看不到控制台視窗,子程序最後都要重定向到父程序的控制台上.

所以  :   不管你是否想要重定向到父程序裡,這介面就只能重定向到父程序裡......

結果出現兩種問題:

1,這種實現導致子程序依賴父程序,只要父程序退出,控制台關閉,子程序輸出的資訊將無法看到

2,表面上子程序與父程序分別各用乙個視窗,但是實際上兩個視窗都是屬於父程序的,當你為了關閉子程序而去錯誤的關閉控制台,父程序將直接關閉(即使有其它視窗),而且子程序實際上並沒有關閉

我還沒有過使用這個庫的網路方面的功能,但是我已經使用過一些其它的簡單功能,配置檔案方面,它貌似只能讀取ini檔案,而不能寫入,但是xml則可以讀取和寫入,字元編碼方面,雖然提供了textencoding與其一堆子類,一般的轉換都能支援,但這種方式卻不支援中文,只有unicodeconverter::toutf8和unicodeconverter::toutf16兩個介面能成功轉換中文,但就為了能呼叫這兩個介面,自己還要特意為了他們兩寫一套乙個string和wstring的轉換.....

如果這個庫的網路方面以及其他方面的實現也如以上這些功能一樣"缺邊少角",或者說"想當然的實現,並沒有考慮使用者的使用"的話,那麼我可能要重新考慮對這個庫的態度了..

最後,我只能繼續使用系統api來建立我的程序....

POCO中資料庫的操作

poco關於資料庫封裝操作放在data目錄下,以前用過關於sqlite的封裝庫感覺挻不錯的,這次要寫個c s的軟體資料庫採用的是sql server,於是就再次選用了poco。關於odbc的操作示例在poco中好像執行時沒有啥效果,今天看著示例自已寫了個。第一步 將資料庫tacksjk.mdf附加到...

在poco庫中使用http的get post的方式

最近專案中用使用poco庫來進行http的請求,中途遇到點問題,發現這方面資料甚少,現總結下使用方法。get方式 訪問http的方法 get 傳送get請求 std ostream ostr session.sendrequest request 接收結果 post方式有兩種方法如下 訪問http的...

糾結的難題

不知道各位在使用oracle時,有木有遇上這麼個情況 相同的資料庫連線,使用者密碼均相同的情況下 在別人機器上,查詢所有的表或者檢視都是有資料的。而在你自己的機器上,並不能查詢到所有的表或檢視均有資料。尤其是那些你需要用到的檢視,那個莫名的火呀!o o 解決方案如下 通過regedit 修改登錄檔 ...