
MFC多线程线程里的变量声明没有作用么?
2个回答
展开全部
多线程里面的变量声明肯定有作用,其作用限制如下:
线程中声明的任何变量都只能在本地使用(即只能在声明所在的线程函数中使用)
因此本地声明的变量无法在其他函数中使用。
但是对于在线程外部声明的变量,则可以跨线程使用。
如果外部声明的变量与本地声明的变量重名,则在没有使用域作用符(即::)时,本地的声明覆盖外部声明的变量。
线程中声明的任何变量都只能在本地使用(即只能在声明所在的线程函数中使用)
因此本地声明的变量无法在其他函数中使用。
但是对于在线程外部声明的变量,则可以跨线程使用。
如果外部声明的变量与本地声明的变量重名,则在没有使用域作用符(即::)时,本地的声明覆盖外部声明的变量。
推荐于2016-07-31 · 知道合伙人互联网行家
关注

展开全部
线程函数的原型必须是unsigned int __stdcall ThreadProc( void* p );这一点没有任何质疑。如果你需要在线程函数里控制另外一个线程的对话框,强烈建议你通过向主线程发送消息的方式实现,这样可以避免不稳定的情况出现。比如:
DWORD WINAPI MyThread( void* p )
{
CXXDlg* pDlg = (CXXDlg*)p;
pDlg->SendMessage( MYMSG, 0, 1 );//向对话框发送消息MYMSG。
// or 直接调用pDlg的功能:
pDlg->DoSomething();
}
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
ON_MESSAGE( MYMSG, OnMyMsg_Thread )
END_MESSAGE_MAP()
void CXXDlg::OnBnClickedTest()
{
HANDLE hThread = CreateThread( NULL, 0, MyThread, this, 0, 0 );
CloseHandle( hThread );
}
LRESULT CXXDlg::OnMyMsg_Thread( WPARAM wParam, LPARAM lParam )
{
DoSomething();
}
DWORD WINAPI MyThread( void* p )
{
CXXDlg* pDlg = (CXXDlg*)p;
pDlg->SendMessage( MYMSG, 0, 1 );//向对话框发送消息MYMSG。
// or 直接调用pDlg的功能:
pDlg->DoSomething();
}
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
ON_MESSAGE( MYMSG, OnMyMsg_Thread )
END_MESSAGE_MAP()
void CXXDlg::OnBnClickedTest()
{
HANDLE hThread = CreateThread( NULL, 0, MyThread, this, 0, 0 );
CloseHandle( hThread );
}
LRESULT CXXDlg::OnMyMsg_Thread( WPARAM wParam, LPARAM lParam )
{
DoSomething();
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询