在主线程中使用sleep函数让主线程休眠一段时间,那么子线程是否会受到影响呢,就自己对于这个问题自己尝试了一下。
验证后发现各个线程之间是在相互独立的运行,无论是主线程还是各个子线程之间都是独立运行的,相互不受影响。
以下是测试函数。
#include <iostream>
#include <windows.h>
using namespace std;
DWORD WINAPI ThreadFun1(LPVOID lparam) // 子线程中启动的子线程
{
while (1)
{
cout<<"Subfunctions "<< endl;
Sleep(100);
}
return 0;
}
DWORD WINAPI ThreadFun(LPVOID lparam) // 主线程中启动的子线程
{
BOOL bReadIsStart2 = FALSE;
HANDLE thread2;
DWORD ThreadID2;
while (1)
{
int* a = (int*)lparam;
cout<<"Functions " << *a << endl;
Sleep(1000);
if (bReadIsStart2 == FALSE)
{
thread2 = CreateThread(NULL,0,ThreadFun1,0,0,&ThreadID2); // 创建子线程的子线程
bReadIsStart2 = TRUE;
}
}
return 0;
}
int main()
{
BOOL bReadIsStart1 = FALSE;
BOOL bReadIsStart2 = FALSE;
HANDLE thread1;
HANDLE thread2;
DWORD ThreadID1;
DWORD ThreadID2;
int a = 1;
int b = 2;
while (1) // 创建两个线程进行验证
{
if (bReadIsStart1 == FALSE)
{
thread1 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&a), 0,&ThreadID1); // 创建线程
bReadIsStart1 = TRUE;
}
if (bReadIsStart2 == FALSE)
{
thread2 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&b),0,&ThreadID2); // 创建线程
bReadIsStart2 = TRUE;
}
Sleep(2000);
cout<<"main "<< endl;
}
CloseHandle(thread1);
CloseHandle(thread2);
return 0;
}
// 子线程中启动的子线程
{
while (1)
{
cout<<"Subfunctions "<< endl;
Sleep(100);
}
return 0;
}
DWORD WINAPI ThreadFun(LPVOID lparam) // 主线程中启动的子线程
{
BOOL bReadIsStart2 = FALSE;
HANDLE thread2;
DWORD ThreadID2;
while (1)
{
int* a = (int*)lparam;
cout<<"Functions " << *a << endl;
Sleep(1000);
if (bReadIsStart2 == FALSE)
{
thread2 = CreateThread(NULL,0,ThreadFun1,0,0,&ThreadID2); // 创建子线程的子线程
bReadIsStart2 = TRUE;
}
}
return 0;
}
int main()
{
BOOL bReadIsStart1 = FALSE;
BOOL bReadIsStart2 = FALSE;
HANDLE thread1;
HANDLE thread2;
DWORD ThreadID1;
DWORD ThreadID2;
int a = 1;
int b = 2;
while (1) // 创建两个线程进行验证
{
if (bReadIsStart1 == FALSE)
{
thread1 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&a), 0,&ThreadID1); // 创建线程
bReadIsStart1 = TRUE;
}
if (bReadIsStart2 == FALSE)
{
thread2 = CreateThread(NULL,0,ThreadFun,(LPVOID)(&b),0,&ThreadID2); // 创建线程
bReadIsStart2 = TRUE;
}
Sleep(2000);
cout<<"main "<< endl;
}
CloseHandle(thread1);
CloseHandle(thread2);
return 0;
}
验证结果,各个线程之间的运行时相互独立的,只按照本身的时间线来走,不受别的线程的影响。主线程休眠与子线程无关。
另,主线程只是人为的称呼,为了方便描述所使用的称呼,各个线程是并行存在的,相互独立运行。