9 个解决方案
#1
多线程
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...
#2
简单的顺序执行方式不能满足要求的时候需要考虑多线程实现,或者有些多任务管理时也需要用到多线程,否则无法并行执行不同功能等等吧。
#3
多线程不是必须的,有时候甚至是以牺牲性能为代价的,但是多线程简化了程序设计方式。找本《Windows核心编程》看看。
#4
单线程好比所有工作都要你自己干,那样你只能一样一样来,多进程好比你把这些工作分给若干人,
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。
你明白了多线程的道理,想学多线程就非常简单了,
mfc给你提供了若干实现多线程的函数和机制,直接调用就好,当然你还要注意资源共享,数据独占,
互斥量等一些问题。
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。
你明白了多线程的道理,想学多线程就非常简单了,
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多线程程序设计》侯捷译的
lz还可以看看《Win32多线程程序设计》侯捷译的
#9
有多线程的高手能提示下我7楼的问题吗???
#1
多线程
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...
1、就如多了几副碗筷,可以抢占更多的系统资源,加快可以分割成独立执行单元的程序段运行
2、提供良好的操作感受:不在UI主线程执行费时的作业(这些作业以线程运行)
3、响应多个并行的请求
...
#2
简单的顺序执行方式不能满足要求的时候需要考虑多线程实现,或者有些多任务管理时也需要用到多线程,否则无法并行执行不同功能等等吧。
#3
多线程不是必须的,有时候甚至是以牺牲性能为代价的,但是多线程简化了程序设计方式。找本《Windows核心编程》看看。
#4
单线程好比所有工作都要你自己干,那样你只能一样一样来,多进程好比你把这些工作分给若干人,
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。
你明白了多线程的道理,想学多线程就非常简单了,
mfc给你提供了若干实现多线程的函数和机制,直接调用就好,当然你还要注意资源共享,数据独占,
互斥量等一些问题。
大家同步进行,同步进行的好处是大家各干各的,除了接口外,其他工作都独立完成,这样不管是
逻辑还是时间上都更加合理,就好象你们单位的若*门协调工作一样。如果所有部门的工作都要
你们老总一个人干,那就是单线程了。
你明白了多线程的道理,想学多线程就非常简单了,
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多线程程序设计》侯捷译的
lz还可以看看《Win32多线程程序设计》侯捷译的
#9
有多线程的高手能提示下我7楼的问题吗???