?? multhread.cpp
字號:
#include <windows.h>
#include <stdio.h>
#include <process.h>
//設立一個全局開關,在規定時刻(所創建這些線程生命期結束的時刻)通知它們
static int runFlag = true;
//各線程所要執行的模塊
unsigned _stdcall threadwork (void * ThreadNo );
//主函數main,也是本進程的主線程執行的代碼
void main(int argc, char *argv[])
{
WORD wRunTime; //秒
SYSTEMTIME now; //時間結構(時,分,秒)
WORD stopTimeMinute, stopTimeSecond;
unsigned ThreadID[200];
int iThread;
//檢查輸入參數個數及輸入參數的合法性并將參數從數字串轉換成數字
if(argc!=3)
{ printf("參數個數錯誤!\n");
exit(0);
}
if((atoi(argv[1]) <=0 )| (atoi(argv[2]) <=0) )
{
printf("參數不合法!\n");
exit(0);
}
iThread=atoi(argv[1]);
wRunTime=atoi(argv[2]);
//計算需線程生命周期(所有新線程共用)
GetSystemTime (&now);//調用返回格林尼治時間
if (now.wHour > 16) //轉化為北京時間
now.wHour-=16;
else
now.wHour+=8;
stopTimeSecond= (now.wSecond + (WORD)wRunTime) % 60;
stopTimeMinute = now.wMinute + (now.wSecond + (WORD)wRunTime)/60 ;
//循環創建新線程(數量由參數中指定)
printf("mul-thread: Suit starting at system time %d:%d:%d\n",
now.wHour, now.wMinute, now.wSecond);
for (int i = 0 ;i <iThread;i++)
{
_beginthreadex(NULL,0,threadwork,(void *)i,0,&ThreadID[i]);
Sleep (100); //****主線程讓出時間,使新建立的線程運行
}
//在子線程工作時不斷循環,判斷是否這些線程生命到期
while (runFlag)
{
GetSystemTime( &now );
if (now.wHour > 16)
now.wHour-=16;
else
now.wHour+=8;
if ((now.wMinute >= stopTimeMinute) && (now.wSecond >= stopTimeSecond))
{runFlag = FALSE;
printf("mul-thread: Suit ended at system time %d:%d:%d\n",
now.wHour, now.wMinute, now.wSecond);
}
Sleep(1000);
}
//在整個process結束(本主線程結束)前留出一段時間好讓各子進程完成自
//己的工作(也便于我們從它們的結束前的輸出來觀察線程的同步問題)
Sleep (500);
//若不在控制臺運行,則下面的語句可保留窗口便于分析結果,當然,若
//上面sleep休眠的時間足夠久則此舉就不必要的;
getchar();
exit(0);
}
//每個新線程所執行的代碼
unsigned _stdcall threadwork (void * ThreadNo )
{
//本地變量
const int napTime= 1000; //毫秒
int iThreadNo = (int)ThreadNo;
//提示創建的相應線程已啟動
printf("Thread %d Started\n",iThreadNo);
//以下代碼段用于使線程睡眠一段時間(讓出cpu供其它創建的進程動作,
//并保證主線程能更及時獲得cpu來運行以改變runflag標志)
while (runFlag)
{
Sleep(napTime);
}
//提示創建的相應線程已經結束(執行完本函數,線程自動結束)
printf("Thread %d Ended\n",iThreadNo);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -