- 浏览: 369898 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
转自
http://blog.csdn.net/pacewalker/article/details/6947123
1._beginthread, _beginthreadex .
用于创建线程
参数:
start_address
Start address of a routine that begins execution of a new thread. For _beginthread, the calling convention is either __cdecl or __clrcall; for _beginthreadex, it is either__stdcall or __clrcall.
对于_beginthread,调用约定 是__cdecl或__clrcall; 对于_beginthreadex,则是either__stdcall或__clrcall。
stack_size
Stack size for a new thread or 0.
arglist
Argument list to be passed to a new thread or NULL.
security
Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If NULL, the handle cannot be inherited. Must be NULL for Windows 95 applications.
initflag
Initial state of a new thread (0 for running or CREATE_SUSPENDED for suspended); use ResumeThread to execute the thread.
thrdaddr
Points to a 32-bit variable that receives the thread identifier. Might be NULL, in which case it is not used.
2._endthread, _endthreadex
用于关闭各个使用_beginthread or _beginthreadex创建的线程
例子:
输出:
一些比较具体的例子:
http://hi.baidu.com/qinpc/blog/item/5aaa8b54918e541b3a2935ee.html
http://www.cppblog.com/mzty/archive/2007/07/25/28756.html
http://blog.csdn.net/pacewalker/article/details/6947123
1._beginthread, _beginthreadex .
用于创建线程
uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( //推荐使用 void *security, //安全属性,NULL为默认安全属性 unsigned stack_size, //指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0 unsigned ( *start_address )( void * ), //指定线程函数的地址,也就是线程调用执行的函数地址(用函数名称即可,函数名称就表示地址) void *arglist, //传给线程的参数指针;传多个参数时请用结构体 //可以通过传入对象的指针,在线程函数中再转化为对应类的指针 unsigned initflag, //线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂) unsigned *thrdaddr //用于记录线程ID的地址 );
参数:
start_address
Start address of a routine that begins execution of a new thread. For _beginthread, the calling convention is either __cdecl or __clrcall; for _beginthreadex, it is either__stdcall or __clrcall.
对于_beginthread,调用约定 是__cdecl或__clrcall; 对于_beginthreadex,则是either__stdcall或__clrcall。
stack_size
Stack size for a new thread or 0.
arglist
Argument list to be passed to a new thread or NULL.
security
Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If NULL, the handle cannot be inherited. Must be NULL for Windows 95 applications.
initflag
Initial state of a new thread (0 for running or CREATE_SUSPENDED for suspended); use ResumeThread to execute the thread.
thrdaddr
Points to a 32-bit variable that receives the thread identifier. Might be NULL, in which case it is not used.
2._endthread, _endthreadex
用于关闭各个使用_beginthread or _beginthreadex创建的线程
void _endthread( void ); void _endthreadex( //推荐使用 unsigned retval );
例子:
// crt_begthrdex.cpp // compile with: /MT #include <windows.h> #include <stdio.h> #include <process.h> unsigned Counter; unsigned __stdcall SecondThreadFunc( void* pArguments ) { printf( "In second thread...\n" ); while ( Counter < 1000000 ) Counter++; _endthreadex( 0 ); return 0; } int main() { HANDLE hThread; unsigned threadID; printf( "Creating second thread...\n" ); // Create the second thread. hThread = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, NULL, 0, &threadID ); // Wait until second thread terminates. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet. WaitForSingleObject( hThread, INFINITE ); printf( "Counter should be 1000000; it is-> %d\n", Counter ); // Destroy the thread object. CloseHandle( hThread ); }
输出:
Creating second thread... In second thread... Counter should be 1000000; it is-> 1000000
一些比较具体的例子:
http://hi.baidu.com/qinpc/blog/item/5aaa8b54918e541b3a2935ee.html
http://www.cppblog.com/mzty/archive/2007/07/25/28756.html
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1325https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 580https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
在C++环境中,我们通常会使用WinAPI函数`_beginthreadex`来创建线程,它是一个跨平台的线程创建方法,属于C运行时库(CRT)的一部分。本文将详细探讨如何使用`_beginthreadex`创建多线程以及其相关的知识点。 首先,...
在Windows编程中,创建线程是一项常见的任务,用于实现并发执行不同的任务。本文将深入探讨两种常见的线程创建函数:`CreateThread`和`_beginthreadex`,以及它们之间的本质区别。 `CreateThread`是Windows API提供...
总的来说,理解并熟练掌握`_beginthreadex`、`PostThreadMessage`、`PeekMessage`和`WaitForSingleObject`的使用是Windows编程中的基础技能。它们对于构建高效、可靠的多线程应用程序至关重要,特别是当需要线程间的...
介绍了delphi中CreateThread与_beginthreadex本质区别。
- 在源代码中使用`_beginthreadex`函数之前没有包含正确的头文件。 2. **编译器设置问题**: - 编译器配置不当,导致未能正确链接多线程运行库。 3. **链接库不正确**: - 项目链接到的不是支持多线程操作的运行...
接下来,`unresolved external symbol __beginthreadex`和`unresolved external symbol __endthreadex`错误通常与线程创建有关,这可能是因为你的项目未正确配置为使用多线程运行时库。MFC在处理多线程时会依赖这些...
2. **VC++与ADO集成**: 在VC++项目中使用ADO,首先需要包含相关的头文件,如`#include <atlbase.h>`和`#include <atlcom.h>`,并链接所需的库如msado15.lib。然后,我们可以创建`CComPtr`智能指针实例,用于安全地...
2. **Windows API**:VC++程序通常使用Windows API来与操作系统交互,比如获取鼠标和键盘输入、绘制图形、打开文件对话框等。开发者需要熟悉如`CreateWindow`、`GetMessage`、`DispatchMessage`等窗口消息处理函数。...
与`CreateThread`不同,`_beginthreadex`会自动处理C运行时库的初始化和清理,使得线程可以安全地使用C运行时库的功能。此外,`_beginthreadex`还提供了更多的控制选项,比如线程优先级和安全属性等。 两者的主要...
1. **线程创建**:在VC++中,可以使用`CreateThread`函数或`_beginthreadex`函数来创建新线程。这两个函数都需要传递一个函数指针,该指针指向新线程要执行的代码入口点。线程创建后,系统会为新线程分配资源,如栈...
_beginthreadex() 和 _endthreadex() 是两个与Win32线程相关的API函数,由Microsoft的C运行时库提供,用于在C++环境中创建和终止线程。本文将详细讨论在使用_beginthreadex() 创建线程后,是否必须显式调用_...
在本实验中,我们将创建一个多线程程序,使用 `_beginthreadex` 函数创建一个线程,线程执行函数为 `Fun`。`Fun` 函数将不间断地循环,循环体首先在屏幕上输出字符串,然后休眠 500 毫秒。主函数 `main` 首先使用 `_...
这两个函数都是在Windows编程环境中用于创建线程的重要手段,但它们在内部实现机制、资源管理以及与C运行时库(CRT)的交互方式上存在显著差异。下面将详细探讨这些知识点: ### _beginthread与CreateThread的核心...
3. `CWinThread::CreateThread`使用_CRT的`_beginthreadex`函数创建线程,`_beginthreadex`是Windows API `CreateThread`的封装。 4. `_beginthreadex`内部调用了`_threadstartex`,这是一个线程启动函数,它使用了...
VC++中可以使用`CreateThread`或`_beginthreadex`创建新线程,同时需要理解线程同步和互斥量的概念,以确保线程安全。 3. **事件处理**:定时器触发时,通常会引发一个事件,需要编写对应的事件处理函数。VC++中...
在VC++编程环境中,多线程(Multithread)是一...总的来说,"vc多线程的小例子"为我们提供了一个学习和实践多线程编程的平台,通过这个例子,开发者可以更好地理解和掌握如何在VC++中构建高效、安全的多线程应用程序。
其次,是“LNK2001 on __beginthreadex and __endthreadex”链接错误。这是由于从VC3.0开始,MFC类库为了实现线程安全性,引入了Thread Local Storage (TLS)。当项目中包含了"MFC"类或使用了"MfcAppWizard"创建的...
2. **调用 `_endthreadex()` 或 `ExitThread()`**:虽然可以结束线程,但不建议这样做,因为它们可能不会正确清理堆栈或其他资源。 3. **调用 `TerminateThread()`**:这会立即终止线程,但可能导致数据损坏和资源未...