⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createprocess.txt

📁 在vc++环境中
💻 TXT
字号:
UINT ThreadFunc(LPVOID param)
{     HDC hdc= GetDC((HWND)param); //获取当前窗口句柄
    //获取线程的启动位置
  int PointX= m_PointX;
  int PointY= 50;
    //给出下一个线程的启动位置
  m_PointX= m_PointX+30;
  ThreadCount= ThreadCount+1;
  int MyThreadNum=ThreadCount;
    //循环执行代码
  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--)
      {
         //输出一个蓝颜色的点
        ::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为传给函数ThreadFunc的参数
    //启动一个线程。
  AfxBeginThread(ThreadFunc,hWnd,THREAD_PRIORITY_NORMAL);
    //ThreadFunc为线程的控制函数的名称。
   //调用全局函数AfxBeginThread来创建一个新的线程。
   //线程的优先级定义为标准优先级。
}
void CThread1View::OnThreadEnd()
{
  // TODO: Add your command handler code here
 ThreadCount=ThreadCount-1; //线程数减1
}


(3) 编制将两个独立应用程序(如记事本和计算器)集成在同一个应用程序中的多进程程序
// procterm项目
# include <windows.h>
# include <iostream>
# include <stdio.h>
static LPCTSTR g_szMutexName= "w2kdg.ProcTerm.mutex.Suicide" ;
 // 创建当前进程的克隆进程的简单方法
void StartClone()
{
   // 提取当前可执行文件的文件名
 TCHAR szFilename[MAX_PATH] ;
 :: GetModuleFileName(NULL, szFilename, MAX_PATH) ;
  // 格式化用于子进程的命令行,指明它是一个EXE文件和子进程
 TCHAR szCmdLine[MAX_PATH] ;
 :: sprintf(szCmdLine, "\"%s\"child" , szFilename) ;
   // 子进程的启动信息结构
 STARTUPINFO si;
 :: ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si)) ;
 si.cb= sizeof(si) ;// 应当是此结构的大小
   // 返回的用于子进程的进程信息
 PROCESS_INFORMATION pi;
   // 用同样的可执行文件名和命令行创建进程,并指明它是一个子进程
BOOLbCreateOK=::CreateProcess(szFilename,szCmdLine,NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi ) ;
 // 释放指向子进程的引用
 if (bCreateOK)
  {
    :: CloseHandle(pi.hProcess) ;
    :: CloseHandle(pi.hThread) ;
  }
}

void Parent()
{
// 创建"自杀"互斥程序体
HANDLE hMutexSuicide=:: CreateMutex(NULL,TRUE,g_szMutexName) ;
if (hMutexSuicide!=NULL)
 {
   // 创建子进程
  std :: cout<< "Creating the child process." << std :: endl;
  :: StartClone() ;
   // 暂停
  :: Sleep(5000) ;
   // 指令子进程"杀"掉自身
  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) ;
   // 准备好终止,清除句柄
  std :: cout<< "Child quiting." << std :: endl;
  :: CloseHandle(hMutexSuicide) ;
 }
}

int main(int argc, char* argv[] )
{
  // 决定其行为是父进程还是子进程
 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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -