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

ζ∽∑∏∞ψ

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 閱讀(2157) 評論(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
這些代碼是你高中寫的?? ?!?br>
我覺得這思路挺好, 將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>
            亚洲午夜电影网| 日韩一区二区精品葵司在线| 国产精品美女久久久久久久| 国产精品久久福利| 国产热re99久久6国产精品| 国产日韩欧美在线| 亚洲国产高清一区二区三区| 一区二区三区高清| 欧美在线一级va免费观看| 久久综合久久综合九色| 亚洲第一视频网站| 日韩一级免费观看| 久久国产加勒比精品无码| 欧美成年人网| 国产乱码精品一区二区三区不卡| 国产日韩欧美综合在线| 亚洲欧洲在线看| 欧美一区二区三区视频在线| 欧美黄免费看| 亚洲影院免费| 欧美日韩欧美一区二区| 悠悠资源网亚洲青| 亚洲综合国产激情另类一区| 欧美成在线观看| 亚洲欧美日韩高清| 欧美日韩成人一区二区| 在线观看91精品国产入口| 亚洲欧美www| 亚洲黄色大片| 久久尤物电影视频在线观看| 国产精品免费网站| 一区二区激情小说| 欧美日韩影院| 欧美日韩国产精品一卡| 精品成人一区二区三区| 性色一区二区| 一本大道av伊人久久综合| 蜜乳av另类精品一区二区| 国产视频在线观看一区二区| 亚洲伊人久久综合| 亚洲乱码国产乱码精品精天堂| 久久综合福利| 亚洲电影毛片| 每日更新成人在线视频| 亚洲欧美日韩一区二区| 国产精品毛片| 亚洲欧美自拍偷拍| 亚洲午夜精品国产| 国产精品福利av| 亚洲欧美日韩一区二区在线| 99视频在线精品国自产拍免费观看 | 亚洲大胆人体在线| 美女脱光内衣内裤视频久久网站| 性欧美大战久久久久久久免费观看 | 亚洲少妇最新在线视频| 国产精品啊啊啊| 亚洲一区二区成人| 亚洲影院色无极综合| 国产日韩欧美综合| 蜜桃久久精品乱码一区二区| 久久久激情视频| 亚洲高清av| 亚洲精品一二三| 国产精品国产精品| 久久精品国产欧美激情| 久久成人综合视频| 91久久久久| 99视频国产精品免费观看| 国产精品久久久久久久久久直播| 性色av一区二区三区| 久久精品成人| 亚洲精品在线视频观看| 一二三四社区欧美黄| 国产欧美日韩激情| 欧美激情日韩| 国产精品久久久一本精品| 久久www免费人成看片高清 | 欧美a级片网站| 欧美日韩亚洲综合一区| 久久成人免费| 欧美大片一区| 欧美一区二区在线看| 免费日韩精品中文字幕视频在线| 一二三区精品| 久久激情久久| 一区二区三区欧美在线| 欧美在线视频不卡| 另类激情亚洲| 欧美在现视频| 一区二区三区四区精品| 亚欧成人精品| 亚洲视频第一页| 久久久久久久999| 亚洲一区二区三区四区五区黄| 久久精品一区四区| 亚洲天天影视| 欧美国产在线视频| 久久久久在线观看| 国产精品高潮呻吟久久| 欧美电影专区| 国产一区二区日韩精品欧美精品| 亚洲人精品午夜| 一色屋精品视频免费看| 亚洲自拍16p| 亚洲午夜精品国产| 欧美激情亚洲自拍| 欧美成人资源网| 激情综合久久| 欧美亚洲视频| 性色av香蕉一区二区| 国产精品99免费看| 亚洲日本一区二区| 亚洲精品国产精品国自产观看| 久久精品国产v日韩v亚洲| 欧美一区二区三区免费看 | 免费不卡欧美自拍视频| 久久久久国产精品午夜一区| 国产精品视频免费一区| 99re6这里只有精品视频在线观看| 亚洲国产精品黑人久久久| 久久精品首页| 免费日韩一区二区| 精品av久久707| 久久美女性网| 麻豆精品91| 亚洲国产精品ⅴa在线观看| 久久精品免费观看| 六月丁香综合| 最新亚洲视频| 欧美区视频在线观看| 亚洲精品视频啊美女在线直播| 亚洲精品久久久久久久久久久久 | 美女91精品| 亚洲国产毛片完整版| 日韩一级在线观看| 欧美日韩亚洲一区二区| 9i看片成人免费高清| 亚洲免费在线看| 国产日韩精品一区二区三区在线| 亚洲欧美日韩精品一区二区 | 在线观看91精品国产麻豆| 欧美成人中文字幕在线| 亚洲精品日产精品乱码不卡| 亚洲一区二区三区欧美| 国产精品中文字幕欧美| 久久久久久久91| 亚洲精品乱码| 小嫩嫩精品导航| 极品日韩久久| 久久国产欧美| 亚洲国产成人精品视频| 欧美激情一区| 亚洲一区二区动漫| 久久永久免费| 99成人在线| 国产日韩欧美麻豆| 麻豆精品在线播放| 日韩一级视频免费观看在线| 欧美一区二区视频观看视频| 亚洲国产精品久久久久秋霞不卡| 欧美日本中文字幕| 欧美亚洲专区| 亚洲精品中文字| 久久尤物视频| 亚洲欧美在线播放| 亚洲欧洲日本mm| 国产日韩久久| 欧美日韩高清在线播放| 久久国产精品久久久久久电车| 亚洲美女在线一区| 久久美女性网| 亚洲欧美综合一区| 亚洲精品在线观看免费| 国产偷自视频区视频一区二区| 欧美成人激情视频| 欧美一区二区三区在线看| 亚洲精品中文字幕有码专区| 美女诱惑一区| 欧美制服丝袜| 亚洲一线二线三线久久久| 亚洲国产另类久久久精品极度| 国产精品呻吟| 欧美日韩国产在线播放| 久久亚洲视频| 久久国产精品99精品国产| 国产精品99久久久久久人 | 亚洲一区二区在线播放| 亚洲精品一区在线观看香蕉| 揄拍成人国产精品视频| 国产精品久久精品日日| 欧美极品影院| 欧美成人xxx| 久久人人97超碰精品888 | 亚洲激情第一区| 欧美电影免费| 免费人成精品欧美精品| 狼狼综合久久久久综合网| 久久精品一区二区三区不卡牛牛| 亚洲制服av| 午夜久久tv|