執行緒

如果你寫程式超過千行,或者,運算時間讓你不滿意時,才會動手去查的東西。

筆者算是不專業的Programmer...

不過最近發現

依些基本程式 跟 圖片處理 的檔案 寫在一起時,程式的delay實在是有讓我換電腦的衝動....

不囉唆,介紹一下。

執行緒這傢伙,可以說是把一件工作拆給不同人去做,各個運算結果再回報給主程式的高明產物,

Function CreateThread(

LPSECURITY_ATTRIBUTES Security,                          //新執行緒的安全性屬性

DWORD dwStackSize,                                                  //新執行緒的堆疊大小

LPTHREAD_START_ROUTINE lpStartAddress,             //新執行緒的執行緒程序。

void* lpParameter,                                                        //要傳遞的參數傳遞給執行緒程序。

DWORD dwCreationFlags,                                            //建立旗標 (0 或 CREATE_SUSPENDED)。

DWORD* lpThreadId                                                   //在成功,接收新建立之執行緒的執行緒 ID DWORD 變數的位址。

)

(以上翻譯是引用MSDN http://msdn.microsoft.com/zh-tw/library/96h5t5a9.aspx )

看似很複雜,不過想想,這些參數也是真的需要的(廢話!!)。

不多說,給個範例


 

 

#include <windows.h>

 

#include <process.h>

 

#include <stdio.h>

 

 

 

void myfunc(int n);

 

 

 

int main()

 

{

 

HANDLE thd[2];

 

DWORD tid;

 

 

 

printf("Thead Start.\n");

 

 

 

for(int i=0; i<2; i++){

 

thd[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)myfunc,(void*)i,0,&tid);

 

printf("Thread %d is start \n",tid);

 

}

 

printf("main is end \n");

 

system("pause");

 

}

 

 

 

void myfunc(int n)

 

{

 

int i;

 

for(int i=n;i<3;i++){

 

printf("%d -1\n",i);

 

Sleep(500);

 

}

 

printf("Thread %d is over \n", getpid());

 

return;

 

}

 

 


執行結果:

 

Thead Start.
Thread 4024 is start
0 -1
Thread 2360 is start
1 -1
main is end
請按任意鍵繼續 . . . 1 -1
2 -1
Thread 5572 is over
2 -1
Thread 5572 is over

 

 

覺得好玩的也去學學吧,這對提高效率很有用喔!

 

arrow
arrow
    全站熱搜

    Vincent 發表在 痞客邦 留言(1) 人氣()