c++ 线程问题(用的是vs2010,win32程序)

qq769018000 2011-08-21 11:43:24
//以下传递给线程函数的参数
typedef struct tagMYDATA
{
HWND hWnd;
HWND hRich;
char szName[256];
}MYDATA,* LPMYDATA;

//以下是线程
unsigned int _stdcall MyScan::fnPortScan(LPVOID lpVoid)
{
LPMYOPTION myOption;
myOption = (LPMYOPTION)lpVoid;

TCHAR szHwnd[256];
wsprintf(szHwnd,TEXT("%d"),(HWND)myOption->hWnd); //我想得到这个句柄,在这里会和传来的参数不一样。
MessageBox(NULL,szHwnd,TEXT("句柄"),NULL); //例如:我在fnThread(HWND hWnd)函数中传个
//窗口句柄, 在这里值就会不一样
return 0;
}

//以下是调用线程
void fnThread(HWND hWnd)
{
HANDLE hThread; //线程句柄
DWORD m_ThreadId; //线程ID

LPMYDATA myData;
myOption->hWnd =hWnd;

hThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void *))fnPortScan,(LPVOID)myData,
0,(unsigned int *)&m_ThreadId);

if(hThread)
CloseHandle(hThread);
}
...全文
187 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq769018000 2012-01-03
  • 打赏
  • 举报
回复
好久没上了,谢谢,feilongjilei分给你了
qq769018000 2011-08-21
  • 打赏
  • 举报
回复
我调试时在线程函数内部,结构myData设置断点,调试时出现下面错误:
hWnd CXX0030: 错误: 无法计算表达式的值
[color=#FF0000]hRich CXX0030: 错误: 无法计算表达式的值
[/color]
jackyjkchen 2011-08-21
  • 打赏
  • 举报
回复
LPMYDATA myData;这一句没分配内存

应该是
MYDATA myData;
myOption。hWnd =hWnd;

hThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void *))fnPortScan,&myData,
0,(unsigned int *)&m_ThreadId);

线程内部相应也要修改
qq769018000 2011-08-21
  • 打赏
  • 举报
回复
呵呵,不好意思复制粘贴没粘贴好,

结构变量,都是 myData;

问题修改后,重发一遍。

//以下传递给线程函数的参数
typedef struct tagMYDATA
{
HWND hWnd;
HWND hRich;
char szName[256];
}MYDATA,* LPMYDATA;

//以下是线程
unsigned int _stdcall MyScan::fnData(LPVOID lpVoid)
{
LPMYDATA myData;
myOption = (LPMYOPTION)lpVoid;

TCHAR szHwnd[256];
wsprintf(szHwnd,TEXT("%d"),(HWND)myData->hWnd); //我想得到这个句柄,在这里会和传来的参数不一样。
MessageBox(NULL,szHwnd,TEXT("句柄"),NULL); //例如:我在fnThread(HWND hWnd)函数中传个
//窗口句柄, 在这里值就会不一样
return 0;
}

//以下是调用线程
void fnThread(HWND hWnd)
{
HANDLE hThread; //线程句柄
DWORD m_ThreadId; //线程ID

LPMYDATA myData;
myData->hWnd =hWnd;

hThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void *))fnPortScan,(LPVOID)myData,
0,(unsigned int *)&m_ThreadId);

if(hThread)
CloseHandle(hThread);
}
genio 2011-08-21
  • 打赏
  • 举报
回复
这里myOption->hWnd =hWnd;是不是应该是myData->hWnd


至善者善之敌 2011-08-21
  • 打赏
  • 举报
回复
看是不结构体LPMYOPTION 参数在其他线程中被改变了
feilongjilei 2011-08-21
  • 打赏
  • 举报
回复
//以下是调用线程
void fnThread(HWND hWnd)
{
HANDLE hThread; //线程句柄
DWORD m_ThreadId; //线程ID

// LPMYDATA myData; // 没有分配空间
LPMYDATA myData = new MYDATA();
myData->hWnd =hWnd;

hThread = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void *))fnPortScan,(LPVOID)myData,
0,(unsigned int *)&m_ThreadId);

if(hThread)
CloseHandle(hThread);
}

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧