多线程实现的一个小程序

想通过对192.168.1.*类地址的搜索,读取局域网内的计算机名。因为单个线程运行速度实在是有点慢,慢主要就慢在当gethostbyaddr函数的返回值等于NULL时,其出结果的时间非常长,导致整个程序运行速度变得很慢。

因此我就想用多线程技术,通过两个线程同时展开搜索,以加快速度。当然,前提是我现在手上有一台双核的计算机。如果没有双核的计算机,即使建立多线程也不能提高速度,我们都知道,单个CPU时,即使创建了多线程,那它也是并发的,并不是真正意义上的并行。

下面贴出源代码:

#include #include #include #include #include #include #include using namespace std; DWORD WINAPI hT1Proc( LPVOID lpParameter // thread data ); DWORD WINAPI hT2Proc( LPVOID lpParameter // thread data ); int temp = 63; HANDLE hMutex; void main() { WSADATA wsaData; int iRet = WSAStartup(MAKEWORD(2,1), &wsaData); if ( iRet != 0 ) { printf( "WSAStartup Error:%d/n", GetLastError() ); exit( 0 ); } HANDLE hThread1,hThread2; hThread1 = CreateThread(NULL,0,hT1Proc,NULL,0,NULL); hThread2 = CreateThread(NULL,0,hT2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); hMutex = CreateMutex(NULL,FALSE,NULL); Sleep(40000000); WSACleanup(); /* string str("192.168.1."); int temp = 67; int nRemoteaddr; char ctemp[2]; itoa(temp,ctemp,10); HOSTENT* pHostent = new HOSTENT; str.append(ctemp); while(temp < 256) { nRemoteaddr = inet_addr(str.c_str()); pHostent = gethostbyaddr((char*)&nRemoteaddr,4,AF_INET); if(pHostent != NULL) { cout<h_name<h_name<h_name<

当中/**/部分是在单线程情况下的代码。

多线程的确有很多复杂的地方,为了避免因时间片时间使用完而引起的错误,采用了建立一个互斥对象的方法。但仍有许多地方不大清楚,或者说不清不楚。在编写的过程中也有许多地方是因为我没考虑周全引起的。

你可能感兴趣的:(C/C++,信息安全)