?? createprocess.txt
字號:
UINT ThreadFunc(LPVOID param)
{ HDC hdc= GetDC((HWND)param); //獲取當(dāng)前窗口句柄
//獲取線程的啟動位置
int PointX= m_PointX;
int PointY= 50;
//給出下一個線程的啟動位置
m_PointX= m_PointX+30;
ThreadCount= ThreadCount+1;
int MyThreadNum=ThreadCount;
//循環(huán)執(zhí)行代碼
while (TRUE)
{ for (inti=0 ; i<250 ; i++)
{
//輸出一個紅顏色的點
::SetPixel(hdc,PointX,PointY+i,RGB(255,0,0));
::Sleep(10);//延時10毫秒
if (MyThreadNum> ThreadCount) return 0;
};
for (int j=250 ; j>0 ; j--)
{
//輸出一個藍(lán)顏色的點
::SetPixel(hdc,PointX,PointY+j,RGB(0,0,255));
::Sleep(10);//延時10毫秒
if (MyThreadNum> ThreadCount) return 0;
}
}
return 0;
}
void CThread1View::OnThreadBegin()
{
HWND hWnd= GetSafeHwnd(); //hWnd為傳給函數(shù)ThreadFunc的參數(shù)
//啟動一個線程。
AfxBeginThread(ThreadFunc,hWnd,THREAD_PRIORITY_NORMAL);
//ThreadFunc為線程的控制函數(shù)的名稱。
//調(diào)用全局函數(shù)AfxBeginThread來創(chuàng)建一個新的線程。
//線程的優(yōu)先級定義為標(biāo)準(zhǔn)優(yōu)先級。
}
void CThread1View::OnThreadEnd()
{
// TODO: Add your command handler code here
ThreadCount=ThreadCount-1; //線程數(shù)減1
}
(3) 編制將兩個獨立應(yīng)用程序(如記事本和計算器)集成在同一個應(yīng)用程序中的多進(jìn)程程序
// procterm項目
# include <windows.h>
# include <iostream>
# include <stdio.h>
static LPCTSTR g_szMutexName= "w2kdg.ProcTerm.mutex.Suicide" ;
// 創(chuàng)建當(dāng)前進(jìn)程的克隆進(jìn)程的簡單方法
void StartClone()
{
// 提取當(dāng)前可執(zhí)行文件的文件名
TCHAR szFilename[MAX_PATH] ;
:: GetModuleFileName(NULL, szFilename, MAX_PATH) ;
// 格式化用于子進(jìn)程的命令行,指明它是一個EXE文件和子進(jìn)程
TCHAR szCmdLine[MAX_PATH] ;
:: sprintf(szCmdLine, "\"%s\"child" , szFilename) ;
// 子進(jìn)程的啟動信息結(jié)構(gòu)
STARTUPINFO si;
:: ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si)) ;
si.cb= sizeof(si) ;// 應(yīng)當(dāng)是此結(jié)構(gòu)的大小
// 返回的用于子進(jìn)程的進(jìn)程信息
PROCESS_INFORMATION pi;
// 用同樣的可執(zhí)行文件名和命令行創(chuàng)建進(jìn)程,并指明它是一個子進(jìn)程
BOOLbCreateOK=::CreateProcess(szFilename,szCmdLine,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi ) ;
// 釋放指向子進(jìn)程的引用
if (bCreateOK)
{
:: CloseHandle(pi.hProcess) ;
:: CloseHandle(pi.hThread) ;
}
}
void Parent()
{
// 創(chuàng)建"自殺"互斥程序體
HANDLE hMutexSuicide=:: CreateMutex(NULL,TRUE,g_szMutexName) ;
if (hMutexSuicide!=NULL)
{
// 創(chuàng)建子進(jìn)程
std :: cout<< "Creating the child process." << std :: endl;
:: StartClone() ;
// 暫停
:: Sleep(5000) ;
// 指令子進(jìn)程"殺"掉自身
std :: cout<< "Telling the child process to quit. "<< std :: endl;
:: ReleaseMutex(hMutexSuicide) ;
// 消除句柄
:: CloseHandle(hMutexSuicide) ;
}
}
void Child()
{
// 打開"自殺"互斥體
HANDLE hMutexSuicide= :: OpenMutex(SYNCHRONIZE, FALSE, g_szMutexName) ;
if (hMutexSuicide!= NULL)
{
// 報告我們正在等待指令
std :: cout<<"Child waiting for suicide instructions. " << std :: endl;
:: WaitForSingleObject(hMutexSuicide, INFINITE) ;
// 準(zhǔn)備好終止,清除句柄
std :: cout<< "Child quiting." << std :: endl;
:: CloseHandle(hMutexSuicide) ;
}
}
int main(int argc, char* argv[] )
{
// 決定其行為是父進(jìn)程還是子進(jìn)程
if (argc>1 && :: strcmp(argv[1] , "child" )== 0)
{
Child() ;
}
else
{
Parent() ;
}
return 0;
}
(4) 編制多纖程程序
#define _WIN32_WINNT 0x0500
#include "windows.h"
#include "iostream.h"
#include "winbase.h"
Struct FiberData
{
void *pfiber1;
void *pfiber2;
void *pfiber3;
};
void _stdcallfiber2(void *)
{
cout<<"Come to fiber #2"<<endl;
int result=0;
FiberData *p=(FiberData*)GetFiberData();
SwitchToFiber(p->pfiber3);
cout<<"Come back to Fiber #2"<<endl;
for(int i=0;i<=100;i++)
result+=i;
SwitchToFiber(p->pfiber3);
cout<<"The sum from 1 to 100 is:"<<result<<endl;
cout<<"switch to main fiber"<<endl;
SwitchToFiber(p->pfiber1);
}
void _stdcallfiber3(void *)
{
FiberData *p=(FiberData*)GetFiberData();
cout<<"Come to Fiber #3 for the first time "<<endl;
SwitchToFiber(p->pfiber2);
cout<<"Come to Fiber #2 again"<<endl;
SwitchToFiber(p->pfiber2);
}
int main (int argc, char* argv[])
{
FiberData fd;
cout<<"Convert thread to fiber"<<endl;
fd.pfiber1=ConvertThreadToFiber(&fd);
cout<<"Create Fiber #2"<<endl;
fd.pfiber2=CreateFiber(0,fiber2,&fd);
cout<<"Create Fiber #3"<<endl;
fd.pfiber3=CreateFiber(0,fiber3,&fd);
cout<<"Switch to Fiber #2"<<endl;
SwitchToFiber(fd.pfiber2);
cout<<"Come to main fiber again"<<endl;
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -