代码源于网络,请勿商用
为什么要多线程(原因很简单哈,多个客服端进入,需要协同连接客服端沟通)(最好使用udp服务器设计)
注意vc6.0 的CreateThread开启线程,会造成内存泄漏,VS高级版本可能有效解决
下面是源代码网址,大家可以参考一下,不过你们运行的时候,发现结果不是想要的那种
https://www.cnblogs.com/TFH-FPGA/archive/2013/01/04/2844978.html
#include <stdio.h> #include <windows.h> DWORD _stdcall ThreadProc(LPVOID lpParameter)//线程执行函数 { int si=100; while(si>0) { printf("子线程输出数字:%d\n",si--); Sleep(1000); } return 0; } int main() { int mi=0; CreateThread(NULL,0,ThreadProc,NULL,0,NULL);//创建一个线程,去执行ThreadProc函数 while(mi<100) { printf("主线程输出数字:%d\n",mi++); Sleep(1000); } return 0; }
运行效果
输出有乱码(可能是内存泄漏缘故)(高级版本的vs可能有效解决(大家百度查看CreateThread))
下面网址 是用_beginthreadex()启动函数 里面解释了CreateThread的问题
https://www.cnblogs.com/candl/p/5429919.html
——————————————————————————————————————————————————
我根据更改成_beginthreadex()的方法 注意vc6.0设置(否者报错) 下面网址有说明
http://blog.csdn.net/syytem004/article/details/41247509
#include<stdio.h> #include <process.h> #include <stdio.h> #include <windows.h> unsigned _stdcall ThreadProc1(LPVOID lpParameter)//线程执行函数1 { int si=100; while(si>0) { printf("子线程:%d\n",si--); Sleep(1000); } return 0; } int main() { int mi=0; HANDLE hth1; unsigned uiThread1ID; hth1 = (HANDLE)_beginthreadex( NULL, 0,ThreadProc1,NULL, CREATE_SUSPENDED,&uiThread1ID ); if(hth1 == NULL) { return FALSE; } else { ResumeThread(hth1); } while(mi<100) { printf("主线程输出数字:%d\n",mi++); Sleep(1000); } return 0; }
完美的运行(但也有些出错概率,具体原因,请看最后的网址)
下面讲为什么会出现问题,原子性操作,不会出错
http://blog.csdn.net/morewindows/article/details/7429155
还网上一些资料希望大家能认真看看,并理解
(转)http://blog.csdn.net/column/details/killthreadseries.html