基础知识:
uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist );uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr );
|
在msdn中这样的例子:
是关于_beginthreadex的
// 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 ); //NULL表示无传递参数
// 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-> %dn", Counter );
// Destroy the thread object.
CloseHandle( hThread );
}
=======================
有传递参数:
#include <windows.h>
#include <stdio.h>
#include <process.h>
typedef struct play_s
{
intsliderRange;
} Play_Param;
unsigned Counter;
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
Play_Param*pp = (Play_Param *) pArguments;
int aa = pp->sliderRange;
while ( Counter < 1000000 )
Counter++;
_endthreadex( 0 );
return 0;
}
int main()
{
HANDLE hThread;
Play_Paramparam;
param.sliderRange =1000;
hThread = (HANDLE)_beginthreadex( NULL, 0,&SecondThreadFunc, ¶m,0,NULL);
//¶m表示传递参数
WaitForSingleObject( hThread, INFINITE );
CloseHandle( hThread );
}
---------------------
void Start(Play_Param *param)
{
setState(RUN);//设置运行标示
if( hThread == 0 &&::WaitForSingleObject(hThread ,1) == WAIT_TIMEOUT)
//判断是否在运行
hThread = (HANDLE)_beginthreadex( NULL, 0,&SecondThreadFunc, param, 0,NULL);
}