64,666
社区成员
发帖
与我相关
我的任务
分享
hThread[i]=CreateThread(NULL,0,Fun1Proc,&i,0,NULL);//&i(类型为int*)会被传递到线程函数Fun1Proc, 而你在线程函数中需要参数为TagScanInfo*,而不是(int*)
#include <stdio.h>
#include <windows.h>
typedef struct TagScanInfo
{
int startip;
int endip; //传递变量
int isEnd;
int idx;
}
ScanInfo,*PScanInfo;
HANDLE g_hMutex = INVALID_HANDLE_VALUE;
DWORD WINAPI Fun1Proc(LPVOID lpParameter)
{
PScanInfo pinfo = (PScanInfo)lpParameter;
int idx = pinfo->idx;
int s1 = pinfo->startip;//获取变量
int e1 = pinfo->endip;
for(;s1 < e1; s1++)
{
WaitForSingleObject(g_hMutex, INFINITE);
if( s1 < e1)
{
Sleep(25);
printf("线程%d %d\n",idx,s1);
ReleaseMutex(g_hMutex);
}
else
{
ReleaseMutex(g_hMutex);
break;
}
}
return 0;
}
int main(int argc, char *argv[])
{
int i=0,u=3;
int iEIP=0,JSIP=5;//设定变量
HANDLE* hThread = new HANDLE[u];
ScanInfo threadInfo[3];
for(;i < u; i++)
{
threadInfo[i].startip = iEIP;
threadInfo[i].endip = JSIP;
threadInfo[i].idx = i;
g_hMutex=CreateMutexA(NULL,FALSE,"MutexToRecive");
hThread[i]=CreateThread(NULL,0,Fun1Proc,&threadInfo[i],0,NULL);
Sleep(10);
}
SetEvent(g_hMutex);
WaitForMultipleObjects(i, hThread, TRUE, INFINITE);
for (int i = 0;i < 3; ++i)
{
CloseHandle(hThread[i]);
}
CloseHandle(g_hMutex);
delete [] hThread;
return 0;
}