MFC程序运行的时候是单线程还是多线程的呢

MFC程序运行的时候是单线程还是多线程的呢,第1张

Windows *** 作系统是基于消息机制运作的。

Windows *** 作系统中为每个线程维护着一个消息池,

并且将收到的消息(比如鼠标点击、键盘按下)先存储到消息池中,

然后再不断地取出消息,传递给需要处理这个消息的函数(比如按钮按下的函数)。

一般,如果f1()、f2()处于同一个线程里时,按消息先后顺序触发对应的f1或f2。先被触发的运行结束后,另一个才被触发。

如果是处于两个不同线程的话,则消息到达后,立即触发对应的f1或f2,看似f1和f2同时在运行了。

一般应用程序默认是单线程的。

如果你需要多线程的话,需要进行额外的编程。(可以参考MSDN上MFC相关的多线程编程相关资料)

获取系统进程要使用CreateToolhelp32Snapshot()函数得到快照,然后进行遍历,取出自己想要的信息就可以了。下面是我自己写的一个由进程名称得到进程ID的函数,要得到所有的进程,你只要把循环进行完就行。上代码:

DWORD CXXXDlg::GetProeccIDByName(CString& csProName)

{

//AddOutPut()是我自己封装的调试函数,可以不用理会

//使用CreateToolhelp32Snapshot()等函数要包含头文件

//#include <TlHelp32h>

 AddOutPut(_T("->由进程名字得到进程ID开始"));

 if (csProNameIsEmpty())

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,进程ID名字为空!"));

  return 0;

 }

 HANDLE hSnapShot = NULL;

 hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

 if (INVALID_HANDLE_VALUE == hSnapShot)

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,创建快照失败!"));

  return 0;

 }

 int nPos = csProNameReverseFind('\\');

 csProName = csProNameRight(csProNameGetLength() - nPos);

 PROCESSENTRY32 proEntry32 = {0};

 bool bRetval = false;

 bool bFind = false;

 proEntry32dwSize = sizeof(PROCESSENTRY32);

 bRetval = Process32First(hSnapShot, &proEntry32)  true : false;

 while (bRetval)

 {

  if (0 == StrCmpI(proEntry32szExeFile, csProName))

  {

   bFind = true;

   break;

  }

  bRetval = Process32Next(hSnapShot, &proEntry32)  true : false;

  proEntry32dwSize = sizeof(PROCESSENTRY32);

 }

 if (!bFind)

 {

  AddOutPut(_T("!!由进程名字得到进程ID失败,未找到该进程!"));

  return 0;

 }

 if (hSnapShot != NULL)

 {

  CloseHandle(hSnapShot);

 }

 AddOutPut(_T("->由进程名字得到进程ID成功"));

 return proEntry32th32ProcessID;

}

以上就是关于MFC程序运行的时候是单线程还是多线程的呢全部的内容,包括:MFC程序运行的时候是单线程还是多线程的呢、mfc 获取系统进程的过程、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9477193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存