【发布时间】:2010-12-29 19:27:41
【问题描述】:
什么是线程? win32应用如何创建线程?
【问题讨论】:
-
阅读 Charles Petzold 的 windows 编程 - amazon.com/Programming-Windows-Microsoft-Charles-Petzold/dp/…
标签: winapi
什么是线程? win32应用如何创建线程?
【问题讨论】:
标签: winapi
线程是一个轻量级的进程。线程可以松散地定义为一个单独的执行流,它与可能发生的所有其他事情同时发生并且独立于其他事情发生。线程就像一个经典程序,从 A 点开始一直执行到 B 点。它没有事件循环。线程独立于计算机中发生的任何其他事情运行。如果没有线程,整个程序可能会被一个 CPU 密集型任务或一个无限循环(有意或无意)拖住。使用线程,其他没有卡在循环中的任务可以继续处理,而无需等待卡住的任务完成。 请通过此链接了解更多详细信息及其与流程的比较。
创建线程非常简单,例如通过这个......
这是一个创建线程的例子,即 ThreadFun1
#include<windows.h>
#include<stdio.h>
#include<conio.h>
void __stdcall ThreadFun1()
{
printf("Hi This is my first thread.\n");
}
void main()
{
printf("Entered In Main\n");
HANDLE hThread;
DWORD threadID;
hThread = CreateThread(NULL, // security attributes ( default if NULL )
0, // stack SIZE default if 0
ThreadFun1, // Start Address
NULL, // input data
0, // creational flag ( start if 0 )
&threadID); // thread ID
printf("Other business in Main\n");
printf("Main is exiting\n");
CloseHandle(hThread);
getch();
}
【讨论】:
如果您正在编写 C/C++ 程序,请不要使用 CreateThread(),而是使用 _beginthreadex()。
_beginthreadex() 将初始化 C/C++ 运行时,但 CreateThread() 不会。
【讨论】:
线程是当前占用CPU的上下文,是Windows CE调度的部分。
要创建线程,请使用CreateThread。您可以阅读更多线程和处理函数here。
此信息对于 Windows CE 6 也是正确的。
【讨论】:
【讨论】:
所有这些答案都建议使用CreateThread()
这只是一个糟糕的建议。
通常应该使用_beginthread() 或_beginthreadex() 创建线程,以确保正确初始化 C/C++ 运行时线程局部结构。
有关更多详细信息,请参阅有关此问题的讨论:Windows threading: _beginthread vs _beginthreadex vs CreateThread C++
【讨论】:
_BeginThread。
Windows CE
Windows CE的情况下更新问题并添加您的答案不正确的相关信息,我可以取消我的反对票。