欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

第二人生的源碼分析(七十六)判斷程序運行多個實

系統 1952 0
隨著多任務系統的流行,可以輕易地把同一個程序同時運行多個實例,這對于一般的應用程序來說,是非常有用的,也大大地提高電腦的使用率。但是對于像第二人生這樣的游戲來說,運行多個實例,是不需要的,也是不現實的。因為它需要非常多的 CPU計算,獨占CPU還不夠用,別說運行多個實例了,并且它是全屏運行的游戲,多個程序運行也不必要。那么第二人生里是使用什么方法來實現跨平臺的多個實例運行的檢測呢?下面就來看看這段代碼:
#001?bool LLAppViewer::anotherInstanceRunning()
#002?{
#003? ?? // We create a marker file when the program starts and remove the file when it finishes.
#004? ?? // If the file is currently locked, that means another process is already running.
#005?
?
獲取作標記文件的路徑和名稱。
#006? ?? std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
#007? ?? llinfos << "Checking marker file for lock..." << llendl;
#008?
?
用只讀的方式打開文件。
#009? ?? //Freeze case checks
#010? ?? apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB);????
打開文件成功,說明已經存在這個文件,如果不存在文件,肯定就不存在多個實例了。
#011? ?? if (fMarker != NULL)
#012? ?? {
?
說明文件已經存在,先把只讀方式的文件關閉。
#013? ?????? // File exists, try opening with write permissions
#014? ?????? apr_file_close(fMarker);
?
用寫的方式打開這人文件。
#015? ?????? fMarker = ll_apr_file_open(marker_file, LL_APR_WB);
?
如果這樣打開文件不成功,說明已經有一個實例已經運行,因為前一個實例用只寫的方式打開文件的。
#016? ?????? if (fMarker == NULL)
#017? ?????? {
#018? ?????????? // Another instance is running. Skip the rest of these operations.
#019? ?????????? llinfos << "Marker file is locked." << llendl;
?
打開文件不成功,說明已經有一個實例運行。
#020? ?????????? return TRUE;
#021? ?????? }
?
下面鎖住這個文件,不允許再用寫的方式打開。
#022? ?????? if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
#023? ?????? {
#024? ?????????? apr_file_close(fMarker);
#025? ?????????? llinfos << "Marker file is locked." << llendl;
#026? ?????????? return TRUE;
#027? ?????? }
#028? ?????? // No other instances; we'll lock this file now & delete on quit.
?
用寫的方式能打開文件,說明沒有另外的實例運行。
#029? ?????? apr_file_close(fMarker);
#030? ?? }
#031? ?? llinfos << "Marker file isn't locked." << llendl;
#032? ?? return FALSE;
#033?}
?
上面這段代碼是通過使用一個不共享寫文件的方法來判斷是否已經存在另外一個實例,這就是第二人生跨平臺檢測是否有第二個實例運行的方法。
?

第二人生的源碼分析(七十六)判斷程序運行多個實例


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产欧美日韩 | 欧美日韩国产一区二区三区不卡 | 亚洲欧美日韩中文字幕久久 | 免费精品美女久久久久久久久久 | 成人一级视频 | 丰满年轻岳中文字幕一区二区 | 一级香蕉免费毛片 | 欧美一级久久久久久久大片 | 深夜福利久久久 | 亚洲日韩中文字幕一区 | 国产一区二区三区在线免费观看 | 牛牛碰在线视频 | 日韩一区二区视频 | 国产一级免费视频 | 亚洲欧美另类日韩 | 日韩精品一区二区在线观看 | 久久免费在线视频 | 成人 精品 | 总攻调教各种受肉 | 亚洲一区二区在线 | 瑟瑟综合| 啪啪免费视频网站 | 欧美三极| 久久精品国产一区二区三区不卡 | 亚洲国产欧美自拍 | 亚洲一区二区在线视频 | 国产一区二区久久 | 欧美日韩一二区 | 免费日韩av| 99久久精品国产片久人 | 十六以下岁女子毛片免费 | 国产精品成人国产乱一区 | 成人午夜在线观看 | 久久福利电影 | 性强烈欧美一级毛片 | 久久一er精这里有精品 | 日本一区二区高清不卡 | 国产视频一区二区 | 欧美亚洲理伦电影毛片在线播放 | 久久久久成人免费 | 亚州精品天堂中文字幕 |