青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

ζ∽∑∏∞ψ

cedricporter -- [ QQ: 414112390 ]

無聊之作 -- 延遲運行其他程序de程序 (C++版)

// By: Cedric Porter [Stupid ET]
// QQ: 414112390    Q群:7196588
// 功能:運行后延遲運行其他程序,例如開機要運行一堆東西的時候就靠他了
// 用Win32編譯方式來編譯,就可以在后臺運行了 
/* 讀的文件格式     :    延遲時間 (單位:毫秒) 要運行的程序的路徑 
1000 notepad
500 calc
2000 e:\Program Files\Tecent\QQ\QQ.exe
*/

// 程序超爛而且我太懶了.就注釋那么多了..僅供交流..
// 因為貼在博客上格式有點變形。所以請復制到VC下,再全選,接著按下Alt+F8格式就整齊了 

#include 
<windows.h>
#include 
<fstream>
#include 
<cstring>
#include 
<cstdlib>

using namespace std;

struct PARAM
{
    unsigned 
long delayTime;
    
string ExePath;       
}
;

unsigned 
long InputHandle();
DWORD WINAPI ThreadProc(PVOID param);

int main()
{     
    Sleep(InputHandle()
+2000);     // 主線程暫停等待其他線程運行完畢 

    
return 0;
}


unsigned 
long InputHandle() //處理 
{
    ifstream inf(
"run.log"); //存放要運行的程序的列表 
    char temp = 0;
    
string    str_delay = "",        // 存放 
        str_ExePath = "";

    unsigned 
long delayTime = 0, MaxTime = 0;
    
bool IsTime = true, next = false;

    inf.
get(temp);

    
while (!inf.eof())    // 判斷是否到列表文件尾部 
    {  
        
if (temp == 10 || temp == 13)     // 判斷是否為回車或換行,如果是,則進行處理 
        {   
            inf.
get(temp);
            
if (str_ExePath == "")
                
continue;
            IsTime 
= true
            next 
= true;

            PARAM
* param = new PARAM;
            param
->delayTime = delayTime;
            param
->ExePath = str_ExePath; 
            HANDLE handle 
= CreateThread(NULL, 0, ThreadProc, (PVOID)param, 0, NULL);
            CloseHandle(handle); 
            
//Sleep(1);

            
if (MaxTime < delayTime)
                MaxTime 
= delayTime;
            str_ExePath 
= "";
            str_delay 
= "";
            delayTime 
= 0;
            
//cout << str_ExePath << endl;   
            continue;
        }

        
else if (temp == ' ')
        
{
            
if (IsTime)
            
{
                delayTime 
= atoi(str_delay.c_str());  
                IsTime 
= false;
                next 
= false;
                inf.
get(temp);    
                
//cout << delayTime << endl;    
                continue
            }

            
if (!next)
                str_ExePath 
+= ' ';

        }

        
else
        
{
            
if (IsTime)   
                str_delay 
+= temp;
            
else
                str_ExePath 
+= temp;
        }


        inf.
get(temp);
    }


    
return MaxTime;    // 返回要延遲的最長時間 
}


DWORD WINAPI ThreadProc(PVOID param)    
// 延緩運行其他程序的線程 
{
    unsigned 
long delayTime = ((PARAM*)param)->delayTime;
    
string ExePath = ((PARAM*)param)->ExePath;
    delete param;

    
//MessageBox(NULL, ExePath.c_str(), "a", 0);
    
//e:\Program Files\Tencent\QQ\QQ.exe

    Sleep(delayTime);
    WinExec(ExePath.c_str(), SW_SHOW);
    
//WinExec("e:\\Progra~1\\Tencent\\QQ\\QQ.exe", SW_SHOW);

    
return 0;
}
 


//湛江二中 華亮

posted on 2009-08-13 11:38 Stupid ET 閱讀(2158) 評論(19)  編輯 收藏 引用 所屬分類: Language

評論

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 11:50 pear_li

想法很可愛
編程意識不錯,handle關閉的很及時
但是winexec這種東西少用  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 13:17 OwnWaterloo

@pear_li
winexec怎么了?  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 13:36 OwnWaterloo

> Sleep(InputHandle()+2000); // 主線程暫停等待其他線程運行完畢
嚴格給的說, 要用 WaitForMultipleObjects。
如果人品非常差, 延遲2秒還是有主線程先結束的可能, 因為調度順序是未知的。

> 因為調度未知
從CreateThread開始, 到次線程Sleep 之間會有未知時間的間隔。
所以, 傳給次線程的, 不應該是delay, 而是awake_time。
次線程在Sleep前一刻, 根據awake_time和current_time, 計算Sleep多久。
這樣, 精度就不受CreateThread,到Sleep之間那段未知時間的影響。
如果精度還要提高, 可以用WaitableTimer。

> CreateThread
在vc上用_beginthreadex代替。 dev c++如果是用的mingw, 也有這個函數。


最后一點………… 其實偷懶的話去查AT的用法 ……
run -> cmd -> at /?
直接寫個bat文件:
at xxxx notepad
at yyyy calc
....

而不用寫一個配置文件, 然后用一個程序去讀, 再執行……
功能差不多, 精度可能低一些。  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 13:37 OwnWaterloo

高中生?  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 13:53 OwnWaterloo

@OwnWaterloo
哦, 原來是個backward compatibility函數……  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 15:12 Stupid ET

呃...曾經是高中時寫的...從我的百度空間移過來的...@OwnWaterloo
  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 15:19 11

典型的濫用多線程的例子。 直接讀取配置來一個排序, 以一個小的粒度檢查時間來運行要運行的程序就可以了。  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 15:20 Stupid ET

哇..佩服佩服.....@OwnWaterloo
  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 15:21 Stupid ET

哦。恍然大悟,O(∩_∩)O謝謝...@11
  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 18:19 OwnWaterloo

@Stupid ET
這些代碼是你高中寫的?? 牛……

我覺得這思路挺好, 將n個任務分到不同線程, 然后用Sleep的方式通知OS。

誰知道OS里面會不會有:
“來一個排序, 以一個小的粒度檢查時間來運行要運行的”線程
這種調度算法呢?

誰知道OS會不會比ls某位的算法更差呢?

誰知道windows下的創建線程開銷會比ls某位的算法高呢?


這些都不知道, 要測也不方便。

但是, 編碼簡單很多~~~ 同時線程間的同步也很方便處理。
KISS~~~  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-13 21:52 Stupid ET

@OwnWaterloo
小菜我剛剛高中畢業,以后多多指教哦...  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 08:32 guest

1:WinExec 返回是進程第一次調用GetMessage或者一個超時,從這點出發,還是不用WinExec為妙
2:博主還沒處理空格符帶來的問題,WinExec填寫的參數是錯誤的,例如有個程序是e:\Program.exe,你的QQ就被病毒給劫持了。
3:主線程應該調WaitForMultipleObjects
4:用CreateProcess或者ShellExcute,前者可以順帶掛起進程,后者可以直接運行腳本或者打開文件。
5:用腳本都可以實現的功能。  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 09:35 11

to OwnWaterloo:
你真的以為線程同步比一個循環來得更簡單么? 很明顯的,啟動那些程序不需要同時執行,既然可以順序執行, 為什么不順序執行呢?我以為代碼是越簡單越好。

這個里面只需要一個 for或while循環就可以完成

//任務列表按執行先后排序
//index = 0;
//n = 任務的個數
while(index < n)
{
//檢查 index 處的任務是否到了執行時間
if(...)// 沒有到
{
Sleep(10); //10毫秒,可以根據需要的精度調整此檢查頻率
}
else
{
// 到了執行, 然后遞增 index 進入下一次循環
}
}
// 全部執行完就自動退出程序

先不談線程開銷這類的, 這個可讀性不是和要執行的任務更一致么?

  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 11:00 Stupid ET

@11
好多牛人....
  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 12:03 OwnWaterloo

@11
@11
>Sleep(10); //10毫秒,可以根據需要的精度調整此檢查頻率
嘿嘿, 是不是我需要更高精度的時候, 應該Sleep(5); ???

你看看這個:
999...999 a_long_delay_work.exe

還覺得你那個方法“效率高”?
你想想"可以根據需要的精度調整此檢查頻率"這句話, 當需要的精度要求達到極限時, 比如Sleep(0); 那個while是不是一個"忙等"?
你以為Sleep沒有開銷嗎? 還Sleep(10)呢, 哈哈哈。


你的代碼簡單嗎? 全都是偽代碼。
而且我也說了, OS調度里面, 這些代碼都有, 你老人家何苦要去和它爭呢?
就這Sleep(10) , 還爭什么呢爭……

你這方案, 至少得算出到下一個任務開始前, 應該大致Sleep多久, 它才不算一個忙等。

-------- --------
而且, 這方案還必須是“先得到所有任務”, 再跑這個半死循環, 才可以。
如果需要再跑半死循環的中途, 新建定時任務呢?
這需求很常見, 很多類似“記事簿”的軟件都要提供這功能, 而且是隨時插入新的任務。

顯然, 你必須至少要開2個線程了, 1個用于用戶輸入, 1個用來跑半死循環。
“任務隊列”現在被2線程共享, 又需要加鎖來同步。
這就是我說的, 自己調度會造成編碼復雜的原因, 懂?


別人的方案有何優勢與劣勢?
如此多的方案,它們各自何種情況下是最佳方式?
想過沒? 同學?
不要想都不想——如果Sleep(10)就是你想的結果, 那我真沒什么必要和你繼續說下去了……——就隨便扣個帽子, 你以為能顯示出你很能嗎?  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 13:21 passing

@OwnWaterloo
淡定淡定
不要折騰  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 14:24 11

設計根據需求而定, 這個程序明顯是不需要運行中提供輸入輸出的。只所以用偽代碼只是為了說明思路。if的前面省略了更新時間標志的代碼,我以為你會知道。

以固定的時間間隔來等是有效率上的問題(應該等待下一個到這一個的間隔),但是就這個應用來說根本用不到很大的精度。 你也說了,多線程中操作系統也需要這樣的操作,難道你覺得有幾個任務要執行就開幾個線程來等待比一個線程的等待更高效?  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-14 15:40 OwnWaterloo

@11
> 但是就這個應用來說根本用不到很大的精度

扯談!

那可不可以說“就這個應用根本不需要考慮效率”?
使用多線程(線程池都免了)的效率完全足夠, 并且——我一直強調的——它編碼簡單, 充分利用"OS已經實現的調度機制",而不是自己重復去發明一套弱小的調度功能。


一上來就拋出一句“典型濫用xxx”, 提出一個所謂的解決方案。
典型的“什么事都想靠自己解決”的初級程序員作法。
  回復  更多評論   

# re: 無聊之作 -- 延遲運行其他程序de程序 (C++版) 2009-08-15 15:45 Stupid ET

其實這個程序只是當時剛剛接觸多線程這樣東西時來應用一下多線程...沒想到引發那么多爭論..........感慨感慨...  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人性生活| 性欧美1819性猛交| 久久久久久夜| 久久久久综合网| 在线不卡中文字幕| 欧美激情精品久久久久| 欧美成人亚洲| 亚洲免费中文| 久久久久久电影| 最新中文字幕亚洲| 99成人免费视频| 国产视频亚洲| 欧美a级片网站| 欧美日韩另类国产亚洲欧美一级| 亚洲综合色激情五月| 亚洲一二三区在线观看| 国产综合色产在线精品| 欧美国产亚洲精品久久久8v| 欧美精品1区2区3区| 亚洲欧美久久久| 久久久久免费视频| 99精品欧美一区二区三区 | 亚洲精品国久久99热| 一区二区三区高清视频在线观看| 国内外成人在线视频| 亚洲美女av网站| 在线看国产一区| 亚洲视频中文| 日韩亚洲精品在线| 久久精品国产久精国产爱 | 国产又爽又黄的激情精品视频 | 久久久免费精品视频| 欧美日韩的一区二区| 久久精品国产99精品国产亚洲性色| 农村妇女精品| 久久久成人精品| 欧美日韩一区在线| 欧美成人免费视频| 国产欧美在线观看一区| 亚洲精品看片| 国产综合精品| 亚洲男女自偷自拍图片另类| 久久国产精品久久久久久电车| 亚洲精品日韩在线观看| 欧美在线观看www| 性久久久久久| 欧美视频在线播放| 亚洲精品久久久久久一区二区| 激情五月综合色婷婷一区二区| 亚洲四色影视在线观看| 日韩视频在线免费| 欧美h视频在线| 欧美91福利在线观看| 国产无一区二区| 亚洲一区二区三区影院| 在线视频精品一| 欧美精品久久久久久久| 欧美激情一区二区三区四区| 在线免费高清一区二区三区| 久久久久成人精品| 欧美成人精品激情在线观看| 在线观看成人av| 久久免费国产精品1| 另类图片综合电影| 激情久久久久久久| 欧美在线欧美在线| 久久久久久电影| 影音先锋亚洲一区| 女主播福利一区| 亚洲激情网站免费观看| 亚洲精品乱码久久久久| 欧美精品午夜视频| 夜夜嗨av色综合久久久综合网| 一区二区电影免费观看| 欧美视频二区| 欧美亚洲日本国产| 欧美成人性网| 日韩小视频在线观看专区| 欧美日韩在线直播| 午夜精品久久99蜜桃的功能介绍| 久久精品在线播放| 亚洲高清成人| 欧美日韩一区二区国产| 午夜精品福利在线| 欧美大片免费观看| 亚洲一区二区三区四区五区午夜| 国产精品香蕉在线观看| 久久久精品午夜少妇| 亚洲成人中文| 性欧美videos另类喷潮| 加勒比av一区二区| 欧美日韩性视频在线| 亚洲欧美日韩一区二区三区在线| 蜜桃av综合| 亚洲欧美高清| 亚洲国产另类久久精品| 欧美视频你懂的| 久久久国产一区二区| 91久久精品国产91久久性色tv| 亚洲你懂的在线视频| 韩国一区二区在线观看| 欧美日韩国产综合视频在线| 午夜亚洲性色视频| 亚洲精品一线二线三线无人区| 久久国产综合精品| 这里只有精品在线播放| 国产在线拍偷自揄拍精品| 欧美剧在线观看| 欧美资源在线| 一区二区三区免费看| 女女同性精品视频| 欧美一级一区| 一本色道久久综合亚洲二区三区| 国内成人精品2018免费看| 欧美日精品一区视频| 日韩亚洲视频在线| 嫩草成人www欧美| 久久不射网站| 亚洲视频综合在线| 亚洲精品国产系列| 激情欧美亚洲| 国产午夜精品福利| 国产精品久久久久久久午夜片| 欧美成人免费观看| 玖玖玖国产精品| 欧美一区二区三区四区高清| 在线视频中文亚洲| 亚洲开发第一视频在线播放| 美国十次成人| 麻豆久久婷婷| 久久躁日日躁aaaaxxxx| 久久激情视频久久| 欧美在线一级视频| 欧美亚洲自偷自偷| 亚洲欧美中文日韩v在线观看| 一本色道久久加勒比精品| 亚洲精品一区二区三| 亚洲高清久久| 亚洲精品三级| 亚洲美女中文字幕| 一区二区激情| 亚洲婷婷在线| 先锋影音国产一区| 欧美影院精品一区| 久久国产福利| 久久婷婷国产麻豆91天堂| 久久九九国产精品| 久久久久国产精品厨房| 久久在线视频| 亚洲国产人成综合网站| 最新精品在线| 一区二区三区色| 亚洲无线视频| 亚洲欧美日韩区| 久久久久久伊人| 欧美日本精品| 国产精品伊人日日| 激情久久一区| 亚洲三级毛片| 午夜精品久久久久久久99热浪潮| 久久成人精品无人区| 久久综合影音| 亚洲激情另类| 亚洲免费中文| 葵司免费一区二区三区四区五区| 欧美国产第一页| 国产精品五月天| 亚洲国产精品激情在线观看| 一区二区免费在线视频| 亚洲欧美日韩一区二区在线 | 亚洲精品一区二区三| 一区二区三区色| 久久久99精品免费观看不卡| 欧美1区2区3区| 国产精品久久久久久妇女6080| 国产欧美日韩视频在线观看 | 久久视频在线免费观看| 亚洲激情在线激情| 性做久久久久久免费观看欧美| 美女精品一区| 国产欧美在线| 在线视频一区二区| 老司机精品视频一区二区三区| 亚洲人精品午夜| 欧美中文字幕在线播放| 欧美日韩国产综合一区二区| 国内成人精品2018免费看| 亚洲色图制服丝袜| 欧美激情2020午夜免费观看| 亚洲午夜激情在线| 欧美激情第1页| 国产一区二区三区在线播放免费观看 | 欧美护士18xxxxhd| 午夜精品国产精品大乳美女| 欧美国产综合视频| 好看的av在线不卡观看| 亚洲一线二线三线久久久| 欧美成人蜜桃| 久久精品国产亚洲aⅴ| 国产精品久久久久毛片大屁完整版 |