`
javababy1
  • 浏览: 1240948 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

多线程CreateThread函数的用法及注意事项

 
阅读更多

微软在Windows API中提供了建立新的线程的函数CreateThread
概述:
当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
  1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
  2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
  3分配context结构
  4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
  5lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
  6把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
语法:
  hThread = CreateThread (&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThread) ;

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);

第一个参数是指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL。
第二个参数是用于新线程的初始堆栈大小,默认值为0。在任何情况下,Windows根据需要动态延长堆栈的大小。
第三个参数是指向线程函数的指标。函数名称没有限制,但是必须以下列形式声明:
DWORD WINAPI ThreadProc (PVOID pParam) ;
第四个参数为传递给ThreadProc的参数。这样主线程和从属线程就可以共享数据。
第五个参数通常为0,但当建立的线程不马上执行时为旗标CREATE_SUSPENDED。线程将暂停直到呼叫ResumeThread来恢复线程的执行为止
第六个参数是一个指标,指向接受执行绪ID值的变量。

注意:临界区要在线程执行前初始化,因为线程一但被建立即开始运行(除非手工挂起),但线程建立后在初始化临界区可能出现问题
如:孙鑫MFC中的现象

分享到:
评论

相关推荐

    delphi2010多线程编程

    Delphi2010多线程编程教程旨在帮助开发者快速掌握多线程编程的要领,包括基础知识、使用TThread类和CreateThread函数实现多线程、注意事项和实例代码分析等内容。本教程适合初学者和有经验的开发者,旨在帮助他们...

    Visual Basic 6.0建立多线程程序就是这么简单

    #### 三、方法1:使用API函数建立多线程 在VB6中,可以通过调用`CreateThread`等Windows API函数来创建多线程。这种方法更接近底层,提供了更多的控制权,但也更加复杂。以下是一段示例代码,展示了如何使用API函数...

    用 setjmp 和 longjmp 实现多线程(1)_多线程_

    在实际的多线程编程中,更推荐使用标准的线程库,如POSIX的pthread或Windows的CreateThread,它们提供了更为完善的线程管理和同步机制。然而,在某些特定场合,如嵌入式系统或对资源极度敏感的环境中,这种技术可能...

    create thread用法

    本文详细介绍了 C++ 中的多线程编程技术,重点讲解了 CreateThread 函数的用法和多线程编程的实践。 关于 CreateThread 函数,CreateThread 是 Windows API 中的一个函数,用于创建新的线程。该函数的声明如下: ...

    VB 实现多线程

    在VB中实现多线程的关键是使用`CreateThread`函数。这是一个来自Windows API的强大工具,用于创建新的线程。 **CreateThread**函数声明: ```vb Public Declare Function CreateThread Lib "kernel32" _ ...

    vb模拟多线程 本地Timer对多线程

    4. 注意事项:使用Timer模拟多线程时,需要注意线程安全问题,比如当多个Timer事件同时触发时,可能会导致数据冲突。因此,需要对共享数据进行适当的锁定和同步,例如使用`Mutex`或`Semaphore`对象。 5. 错误处理:...

    Delphi 多线程编程

    #### 四、Delphi多线程编程技巧与注意事项 - **线程优先级调整**:在某些情况下,可能需要调整线程的优先级以优化资源分配。可以通过`SetThreadPriority`函数来实现。 - **异常处理**:在多线程环境下,异常处理尤...

    VC多线程实例

    本文将深入探讨“VC多线程实例”中的核心知识点,并以`CreateThread`函数为例进行详细讲解。 多线程允许一个程序同时执行多个任务,这在现代计算机系统中具有重要的应用价值。在VC中,实现多线程主要依靠Windows ...

    利用VB多线程. 解决VB没有多线程的问题

    在提供的压缩包文件中,`codechn_使用说明.txt`可能是关于使用VB多线程的详细步骤和注意事项;`www.pudn.com.txt`可能包含了更多相关资源链接或者讨论;`源码中国.url`可能是一个指向源码中国的链接,你可以在这里...

    vc多线程编程简单介绍

    通过上述简单的介绍,我们了解到在VC++中实现多线程编程的基本方法和注意事项。在实际项目中,多线程可以极大地提高程序的并发性能,但也需要谨慎处理线程间的交互,确保程序的正确性和稳定性。为了更深入地学习,...

    VC多线程编程(转).pdf

    本知识点主要围绕Win32 API和MFC(Microsoft Foundation Classes)框架下多线程编程的实现方法和注意事项进行阐述。 Win32 API是Windows操作系统提供的一套用于进行系统级编程的函数库,包括了创建和管理线程的函数...

    vc多线程编程

    二、多线程的优势与注意事项 多线程可以实现任务并行,避免单一任务长时间占用CPU,但同时也可能导致CPU频繁在不同线程间切换,增加开销。在单处理器系统中,多个线程实际上是通过时间片轮转的方式交替执行,而非...

    多线程使用操作大全

    本文主要围绕多线程在Java中的使用展开,深入探讨了线程控制的基本方法及其应用场景,并提供了具体的示例代码来帮助理解。主要包括线程的生命状态检查、优先级管理、线程间通信以及一些重要的线程控制函数如`sleep()...

    Win32多线程(1)

    本文介绍了Win32多线程的基本概念及如何使用`CreateThread`函数创建线程,并通过一个简单的示例演示了多线程的使用方法。在实际开发过程中,还需要考虑更多的细节问题,如线程间的同步机制、异常处理等。希望本文能...

    C++多线程编程入门小结.pdf

    在Windows平台上,可以使用CreateThread函数创建线程。CreateThread的参数包括线程的安全属性(lpSecurityAttributes)、堆栈大小(dwStackSize)、线程的起始地址(lpStartAddress)、传递给线程的参数...

    VC++多线程编程方法

    #### 六、多线程编程注意事项 1. **资源共享与同步**:由于线程共享同一进程的资源,因此必须确保线程之间的正确同步,避免数据竞争和死锁等问题。 2. **资源分配与回收**:合理规划线程数量,避免过多线程导致系统...

    VC多线程例程四及图解文档,测试windos支支持的线程数

    本篇文章将深入探讨标题和描述中提到的“VC多线程例程四及图解文档”,并介绍多线程的基本概念、如何在VC++中创建线程以及测试Windows系统对线程数量的支持。 一、多线程基础 1. **线程定义**:线程是操作系统分配...

    易语言简单类函数指针

    6. **安全性与注意事项**:使用类函数指针需要注意线程安全问题,特别是在多线程环境中,确保对共享资源的正确同步和访问控制。 7. **示例代码**:提供一个简单的易语言代码示例,展示如何创建线程并使用类函数指针...

    C++多线程编程资料(容易理解)

    #### 四、多线程注意事项 - **资源共享**: 在多线程编程中,需要注意线程间的资源共享问题。例如,如果多个线程同时访问同一变量,可能会导致数据竞争和不一致的问题。 - **同步机制**: 为了防止数据竞争和死锁等...

Global site tag (gtag.js) - Google Analytics