阅读:1354回复:6
SOS! _beginthread函数问题
SOS! _beginthread函数在win32程序下语句
_beginthread(TransferThread,0,&outThreadControl)没问题 ,但是在mfc下编译出错! win32下程序 _beginthread(TransferThread,0,&outThreadControl); TransferThread函数定义: void TransferThread(PTHREAD_CONTROL threadControl) //Send the iocontrol signal to driver void TransferThread(PTHREAD_CONTROL threadControl) { int i; i=0; // perform the IO transfer threadControl->status = DeviceIoControl (threadControl->hDevice, threadControl->Ioctl, threadControl->InBuffer, threadControl->InBufferSize, threadControl->OutBuffer, threadControl->OutBufferSize, &threadControl->BytesReturned, NULL); // if an event exists, set it if (threadControl->completionEvent) SetEvent(threadControl->completionEvent); return; } 程序正确! 而在mfc下出错:不能转化类型PTHREAD_CONTROL to (void *) 我改成这样就好了: TransferThread函数定义: void TransferThread(void * m_thptr); void TransferThread(void * m_thptr) { //struct _THREAD_CONTROL * threadControl=(struct _THREAD_CONTROL *)m_thptr; // perform the IO transfer ((struct _THREAD_CONTROL *)m_thptr)->status = DeviceIoControl ( ((struct _THREAD_CONTROL *)m_thptr)->hDevice, ((struct _THREAD_CONTROL *)m_thptr)->Ioctl, ((struct _THREAD_CONTROL *)m_thptr)->InBuffer, ((struct _THREAD_CONTROL *)m_thptr)->InBufferSize, ((struct _THREAD_CONTROL *)m_thptr)->OutBuffer, ((struct _THREAD_CONTROL *)m_thptr)->OutBufferSize, &((struct _THREAD_CONTROL *)m_thptr)->BytesReturned, NULL); // if an event exists, set it if (((struct _THREAD_CONTROL *)m_thptr)->completionEvent) SetEvent(((struct _THREAD_CONTROL *)m_thptr)->completionEvent); return ; } 请问是为什么??? 大虾指点迷津!! |
|
|
沙发#
发布于:2007-03-09 13:13
这个问题折腾好久了,还是解决了(虽然不知原因),谢谢上楼的大虾了!
|
|
|
板凳#
发布于:2007-03-09 13:00
引用第4楼wjt810907于2007-03-09 12:42发表的“”: 不太清楚,可能编译选项不太一样,对类型检查不是太严格。 |
|
|
地板#
发布于:2007-03-09 12:42
那大虾知道为什么在win32下“用PTHREAD_CONTROL类型作为它的参数类型”正确呢?
|
|
|
地下室#
发布于:2007-03-09 09:25
第一点:注意下面两个函数原型中红色的地方
uintptr_t _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); 第二点:线程函数的参数为void*,你不能用PTHREAD_CONTROL类型作为它的参数类型,这样在连接时会出错,因为类型不匹配。可以如下: 原型:void __cdecl TransferThread(void * m_thptr); 函数:void __cdecl TransferThread(void * m_thptr) { struct _THREAD_CONTROL * threadControl=(struct _THREAD_CONTROL *)m_thptr; // perform the IO transfer ((struct _THREAD_CONTROL *)m_thptr)->status = DeviceIoControl ( threadControl->hDevice, threadControl->Ioctl, threadControl->InBuffer, ... Good Luck ![]() |
|
|
5楼#
发布于:2007-03-06 08:35
有没有人知道?指点一下啊
|
|
|
6楼#
发布于:2007-03-05 09:57
没人理,自己顶一下
|
|
|