多线程的好处:
1.可以节省内存空间。
2.进程与进程切换。需要交换整个内存空间。多线程可以节省时间。线程与线程之间的切换只需要一个运行环境的改变。执行效率比较高。。。
#include<windows.h>
#include<iostream>
DWORD API ThreadFun();
int main()
{
HANDLE hThread;
hTread=CreateThread(NULL,0,ThreadFun,0,Null);
CloseHandle(hThread);
cout<<"Main Thread is running !";
return 0;
}
DWORD API TreadFun()
{
cout<<"Tread is Running!";
return 0;
}
主线程退出。进程就会退出,那么在进程里的所有资源以及线程都将会退出。
所有上面TreadFun是没有执行的机会的。
也就是说创建线程并不一定会立刻给他分配时间片。也就是说上说程序,在创建线程之后并没有给线程分配时间片。而主线程的时间片执行完之后。主线程就会退出。主线程退出那么进程就会退出。进程退出则创建的线程就没了执行机会。
互斥信号量对象:与线程相关。CreateMutex(NULL,TRUR,NULL);信号量处于未通知状态。信号量对象主线程拥有。并此时信号量在主线程的计数为1;
WaitForSingleObject(hMutex,);release();
//没有消息过来的时候。recv接收函数就会阻塞。线程就会切换。。。相同的。码流没到来的时候。那么主线程就会等待,其他线程就会执行。。。回调函数就会执行。。。2.由于接收消息时,可能会有消息延迟。则导致RecvFrom函数等待。进而导致线程被挂起。所以应该将接收消息的模块单独放在另一个线程内。使之只负责接收消息。在创建线程时。应当传递传入两个参数。一个是绑定的套接字。另一个则是接收数据的窗口句柄。以便抛消息到此窗口上。另:抛消息时可以另带参数,进而可以将接收到数据随消息传送到窗口内。。。。在接收消息的线程中应当使用一个while(true)死循环。以便此线程可以一直运行下去。一直不停的接收数据。
最重要的是不需要考虑线程之间切换的问题。。。因为CPU的时间片很短,没必要增加手动切换线程。实际上这样会大大增大程序维护的成本。。。