C++多线程实例
来源:互联网 发布:php 获取请求参数 编辑:程序博客网 时间:2024/06/04 00:23
注意:在编译多线程文件之前,在VC上要作相应的设置Projects->settiong->C/C++,选择Category:Code Generation,Use run-time library:Debug MutiThreaded
#include <stdio.h>
#include <string> // for STL string class#include <windows.h> // for HANDLE
#include <process.h> // for _beginthread()
using namespace std;
class ThreadX
{
private:
int loopStart;
int loopEnd;
int dispFrequency;
public:
string threadName;
ThreadX( int startValue, int endValue, int frequency );
static unsigned __stdcall ThreadStaticEntryPoint(void * pThis);
void ThreadEntryPoint();
};
ThreadX::ThreadX(int startValue, int endValue, int frequency)
{
loopStart = startValue;
loopEnd = endValue;
dispFrequency = frequency;
}
unsigned __stdcall ThreadX::ThreadStaticEntryPoint(void * pThis)
{
ThreadX * pthX = (ThreadX*)pThis;
pthX->ThreadEntryPoint();
return 0;
}
void ThreadX::ThreadEntryPoint()
{
for (int i = loopStart; i <= loopEnd; ++i)
{
if (i % dispFrequency == 0)
{
printf( "%s: i = %d\n", threadName.c_str(), i );
}
}
printf( "%s thread terminating\n", threadName.c_str() );
}
int main()
{
ThreadX * o1 = new ThreadX( 0, 3000, 200 );
HANDLE hth1;
unsigned uiThread1ID;
hth1 = (HANDLE)_beginthreadex( NULL, // security
0, // stack size
ThreadX::ThreadStaticEntryPoint,
o1, // arg list
CREATE_SUSPENDED, // so we can later call ResumeThread()
&uiThread1ID );
if ( hth1 == 0 )
printf("Failed to create thread 1\n");
DWORD dwExitCode;
GetExitCodeThread( hth1, &dwExitCode ); // should be STILL_ACTIVE = 0x00000103 = 259
printf( "initial thread 1 exit code = %u\n", dwExitCode );
o1->threadName = "t1";
ThreadX * o2 = new ThreadX( -1000, 0, 200 );
HANDLE hth2;
unsigned uiThread2ID;
hth2 = (HANDLE)_beginthreadex( NULL, // security
0, // stack size
ThreadX::ThreadStaticEntryPoint,
o2, // arg list
CREATE_SUSPENDED, // so we can later call ResumeThread()
&uiThread2ID );
if ( hth2 == 0 )
printf("Failed to create thread 2\n");
GetExitCodeThread( hth2, &dwExitCode ); // should be STILL_ACTIVE = 0x00000103 = 259
printf( "initial thread 2 exit code = %u\n", dwExitCode );
o2->threadName = "t2";
// If we hadn't specified CREATE_SUSPENDED in the call to _beginthreadex()
// we wouldn't now need to call ResumeThread().
ResumeThread( hth1 ); // serves the purpose of Jaeschke's t1->Start()
ResumeThread( hth2 );//你需要恢复线程的句柄 使用该函数能够激活线程的运行
WaitForSingleObject( hth1, INFINITE );
WaitForSingleObject( hth2, INFINITE );
GetExitCodeThread( hth1, &dwExitCode );
printf( "thread 1 exited with code %u\n", dwExitCode );
GetExitCodeThread( hth2, &dwExitCode );
printf( "thread 2 exited with code %u\n", dwExitCode );
CloseHandle( hth1 );
CloseHandle( hth2 );
delete o1;
o1 = NULL;
delete o2;
o2 = NULL;
printf("Primary thread terminating.\n");
return 0;
}
0 0
- C#Socket多线程实例
- 4.多线程实例:thread.c
- 4.多线程实例:thread.c
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- linux下C语言多线程编程实例
- 方便使用FFMPEG的经验
- 线程基础篇Looper
- SpringMVC Controller方法入参映射探秘
- 源码中编译.so文件
- 利用MultipartFile实现文件上传
- C++多线程实例
- 从设计不足的JDBC 说到数据库链接池
- Flex 的一些初始化事件initialize,creationComplete,applicationComplete
- Python安装nltk使用Ngram
- velocity使用经验积累
- 【Android知识点精讲】(16)资源与数据存储
- C++-----单链表基本操作
- 数组去重 PHP
- SDUT-14级训练1-Periodic Strings