_beginthreadex 线程 函数 解决假死
2012-03-31 17:01
211 查看
.h文件中添加:
public:
HANDLE
Exit_CS;
.cpp文件构造函数添加:
A::A(CWnd* pParent /*=NULL*/)
: CDialog(A::IDD, pParent)
{
//{{AFX_DATA_INIT(A)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
Exit_CS = ::CreateEvent( NULL, TRUE, FALSE, NULL );
}
析构函数中添加:
A::~A()
{
::SetEvent( Exit_CS );
}
如果你想把
int A::Save(CString cs) //有假死
{
//内容
}
Save函数线程化
可以
在.h文件中添加:
UINT WINAPI Deal_Save(LPVOID pSrt);声明
在.cpp文件中这样改:
int flagSort == 0;//连续点击Save按钮,保证只有一次线程执行
int A::Save(CString cs)
{
if(flagSort == 0)
{
flagSort = 1;
UINT uiThreadID;
HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, Deal_Save, this, 0, &uiThreadID );
if(hThread)
{
::CloseHandle( hThread );
}
}
}
UINT WINAPI A::Deal_Save(LPVOID pSrt)
{
A *psort = (A*)pSrt;
//内容
//(这时类内的成员函数、成员变量,前面都要加上
psort -> ,函数里的所有for(int j.....)循环内,都加上
// if ( j != 0 && ( j % 15 == 0 )) //15可变
// {
// WaitForSingleObject( psort->Exit_CS, 1 );//1可变
// }
//)
flagSort = 0;
return 0;
}
最后,学的不精,欢迎高手指教
public:
HANDLE
Exit_CS;
.cpp文件构造函数添加:
A::A(CWnd* pParent /*=NULL*/)
: CDialog(A::IDD, pParent)
{
//{{AFX_DATA_INIT(A)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
Exit_CS = ::CreateEvent( NULL, TRUE, FALSE, NULL );
}
析构函数中添加:
A::~A()
{
::SetEvent( Exit_CS );
}
如果你想把
int A::Save(CString cs) //有假死
{
//内容
}
Save函数线程化
可以
在.h文件中添加:
UINT WINAPI Deal_Save(LPVOID pSrt);声明
在.cpp文件中这样改:
int flagSort == 0;//连续点击Save按钮,保证只有一次线程执行
int A::Save(CString cs)
{
if(flagSort == 0)
{
flagSort = 1;
UINT uiThreadID;
HANDLE hThread = (HANDLE)_beginthreadex( NULL, 0, Deal_Save, this, 0, &uiThreadID );
if(hThread)
{
::CloseHandle( hThread );
}
}
}
UINT WINAPI A::Deal_Save(LPVOID pSrt)
{
A *psort = (A*)pSrt;
//内容
//(这时类内的成员函数、成员变量,前面都要加上
psort -> ,函数里的所有for(int j.....)循环内,都加上
// if ( j != 0 && ( j % 15 == 0 )) //15可变
// {
// WaitForSingleObject( psort->Exit_CS, 1 );//1可变
// }
//)
flagSort = 0;
return 0;
}
最后,学的不精,欢迎高手指教
相关文章推荐
- 封装windows 线程创建函数_beginthreadex和createthread函数的类
- windows笔记-创建线程的另一个函数_beginthreadex
- _beginthreadex、CreateThread、AfxBeginThread 几个线程函数的区别(转)
- -创建线程的另一个函数_beginthreadex
- CreateThread, AfxBeginThread,_beginthread, _beginthreadex线程函数区别
- windows笔记-创建线程的另一个函数_beginthreadex
- 创建线程的另一个函数_beginthreadex
- windows笔记-创建线程的另一个函数_beginthreadex
- 在类中使用_beginthreadex函数创建线程并访问该类中的数据成员
- 线程控制 - _beginthreadex的封装类
- 谈.Net委托与线程——解决窗体假死
- 使用CreateThread函数和_beginThreadex函数的注意事项
- _beginthreadex出错解决
- unresolved external symbol __beginthreadex错误的解决——谈谈在Win32 Consle Application如何使用MFC类
- .net 利用委托和线程解决窗体假死
- 在类中创建成员函数线程的最优解决方法
- 问题 error C2065: '_beginthreadex' : undeclared identifier 的解决办法
- 创建线程的方法【CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别】
- 在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。(以解决)
- 使用CreateThread函数和_beginThreadex函数的注意事项