Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 多线程行为?_C_Multithreading_Mfc - Fatal编程技术网

C 多线程行为?

C 多线程行为?,c,multithreading,mfc,C,Multithreading,Mfc,我有以下MFC控制台程序: UINT ThreadFunc(LPVOID); int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { for (int i = 0; i < 5; i++) { if (AfxBeginThread(ThreadFunc, (LPVOID)i)) { printf("Thread launched: %d\n", i);

我有以下MFC控制台程序:

UINT ThreadFunc(LPVOID);

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    for (int i = 0; i < 5; i++)
    {
        if (AfxBeginThread(ThreadFunc, (LPVOID)i))
        {
            printf("Thread launched: %d\n", i);
        }
    }

    Sleep(2000);

    system("pause");

    return 0;
}

UINT ThreadFunc(LPVOID n)
{
    for (int i = 0; i < 10; i++)
    {
        printf("%d%d%d%d%d%d%d%d\n", (int)n, (int)n, (int)n, (int)n, (int)n, (int)n, (int)n, (int)n);
    }

    return 0;
}

所以我想了解这里发生了什么。为什么线程的打印彼此不同(一个线程打印应该由另一个线程打印的数字)?为什么一个线程只在创建下一个线程后打印(一次打印!)

每个线程都在打印分配给它的数字。只是所有线程都在同一时间运行,所以它们的输出是重叠的。如果在
ThreadFunc
的开头和结尾添加
printf
,您可能会更好地看到发生了什么


Windows不保证线程的运行顺序,也不保证线程的运行时间,这就是为什么会看到变量。每次运行程序时,你很可能得到不同的结果。

是C++框架,而不是C。你的问题是关于多线程的基础知识,我们都必须学习如何= =)所以检查这个YouTube Selee它相当不错,而且这个人解释得相当好。谢谢您的回复@shf301!如果我调试代码,一个线程只在for语句中创建另一个线程时打印。它们之间有关系吗?或者与此无关?调试时您将看到完全不同的行为,因为这将影响线程的运行方式。
Thread launched: 0
00000000
00000000
00000000
00000000
00000000
00000000
Thread launched: 1
11111111
11111111
11111111
Thread launched: 2
00000000
00000000
00000000
00000000
33333333
33333333
33333333
Thread launched: 3
11111111
11111111
11111111
11111111
44444444
44444444
44444444
Thread launched: 4
22222222
22222222
22222222
22222222
22222222
22222222
22222222
22222222
22222222
22222222
11111111
11111111
11111111
44444444
44444444
44444444
44444444
44444444
44444444
44444444
33333333
33333333
33333333
33333333
33333333
33333333
33333333