什么时候需要用到多线程?多线程的好处有那些?

时间:2022-10-06 16:03:42
想学多线程,但不知道该从何下手,希望大家多给点意见~

9 个解决方案

#1


多线程
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...

#2


简单的顺序执行方式不能满足要求的时候需要考虑多线程实现,或者有些多任务管理时也需要用到多线程,否则无法并行执行不同功能等等吧。

#3


多线程不是必须的,有时候甚至是以牺牲性能为代价的,但是多线程简化了程序设计方式。找本《Windows核心编程》看看。

#4


单线程好比所有工作都要你自己干,那样你只能一样一样来,多进程好比你把这些工作分给若干人,
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。

你明白了多线程的道理,想学多线程就非常简单了,
mfc给你提供了若干实现多线程的函数和机制,直接调用就好,当然你还要注意资源共享,数据独占,
互斥量等一些问题。

#5


多谢楼上几位XD, 现在正在看关于多线程的例子, 但书上看的不是很明白
大家给我推荐几篇关于多线程的文章吧!谢谢了

#6


  就是可以同时做N件事情 而不用堵塞在那里

多线程主要处理好同步问题

#7


看到书上的例子有点疑问,知道的朋友帮忙解释下.. .谢了~!

//互斥同步
int WorkID = 10;
const int MAXNUM = 100;
HANDLE hMutex;

DWORD __stdcall ThreadOne( LPVOID lparam )
{
   for(;;)
   {
      WaitForSingleObject( hMutex, INFINITE );
      if(WorkID < MAXNUM)
      {
          WorkID += 1;
          Sleep(1000);
          printf("WorkID: %i\n",WorkID);
      }
      ReleaseMutex(hMutex);
   }
   return 0;
}

DWORD __stdcall ThreadTwo( LPVOID lparam )
{
   for(;;)
   {
      WaitForSingleObject( hMutex, INFINITE );
      if(WorkID < MAXNUM)
      {
          WorkID += 1;
          printf("WorkID: %i\n",WorkID);
          Sleep(1000);
      }
      ReleaseMutex(hMutex);
   }
   return 0;
}

void Main()
{
   HANDLE hThread1, hThread2;

  //创建线程后并立即执行
  hThread1 = ::CreateThread(NULL,0,ThreadOne,NULL,0,NULL);
  hThread2 = ::CreateThread(NULL,0,ThreadTwo,NULL,0,NULL);

  //为什么在创建线程之后再创建互斥对象? 此时的ThreadOne和ThreadTwo中的hMutex
  //应该还是NULL吧! 
  hMutex = CreateMutex(NULL,false,"mutex");

  CloseHandle( hThread1 );
  CloseHandle( hThread2 );
  
  while(true)
  {
     ;
  }
}

#8


除了《Windows核心编程》
lz还可以看看《Win32多线程程序设计》侯捷译的

#9


有多线程的高手能提示下我7楼的问题吗???

#1


多线程
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...

#2


简单的顺序执行方式不能满足要求的时候需要考虑多线程实现,或者有些多任务管理时也需要用到多线程,否则无法并行执行不同功能等等吧。

#3


多线程不是必须的,有时候甚至是以牺牲性能为代价的,但是多线程简化了程序设计方式。找本《Windows核心编程》看看。

#4


单线程好比所有工作都要你自己干,那样你只能一样一样来,多进程好比你把这些工作分给若干人,
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。

你明白了多线程的道理,想学多线程就非常简单了,
mfc给你提供了若干实现多线程的函数和机制,直接调用就好,当然你还要注意资源共享,数据独占,
互斥量等一些问题。

#5


多谢楼上几位XD, 现在正在看关于多线程的例子, 但书上看的不是很明白
大家给我推荐几篇关于多线程的文章吧!谢谢了

#6


  就是可以同时做N件事情 而不用堵塞在那里

多线程主要处理好同步问题

#7


看到书上的例子有点疑问,知道的朋友帮忙解释下.. .谢了~!

//互斥同步
int WorkID = 10;
const int MAXNUM = 100;
HANDLE hMutex;

DWORD __stdcall ThreadOne( LPVOID lparam )
{
   for(;;)
   {
      WaitForSingleObject( hMutex, INFINITE );
      if(WorkID < MAXNUM)
      {
          WorkID += 1;
          Sleep(1000);
          printf("WorkID: %i\n",WorkID);
      }
      ReleaseMutex(hMutex);
   }
   return 0;
}

DWORD __stdcall ThreadTwo( LPVOID lparam )
{
   for(;;)
   {
      WaitForSingleObject( hMutex, INFINITE );
      if(WorkID < MAXNUM)
      {
          WorkID += 1;
          printf("WorkID: %i\n",WorkID);
          Sleep(1000);
      }
      ReleaseMutex(hMutex);
   }
   return 0;
}

void Main()
{
   HANDLE hThread1, hThread2;

  //创建线程后并立即执行
  hThread1 = ::CreateThread(NULL,0,ThreadOne,NULL,0,NULL);
  hThread2 = ::CreateThread(NULL,0,ThreadTwo,NULL,0,NULL);

  //为什么在创建线程之后再创建互斥对象? 此时的ThreadOne和ThreadTwo中的hMutex
  //应该还是NULL吧! 
  hMutex = CreateMutex(NULL,false,"mutex");

  CloseHandle( hThread1 );
  CloseHandle( hThread2 );
  
  while(true)
  {
     ;
  }
}

#8


除了《Windows核心编程》
lz还可以看看《Win32多线程程序设计》侯捷译的

#9


有多线程的高手能提示下我7楼的问题吗???