几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » 程序设计 » vc编程
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2007-03-25, 11:40 AM   #1
huangyhg
超级版主
 
huangyhg的头像
 
注册日期: 04-03
帖子: 18592
精华: 36
现金: 249466 标准币
资产: 1080358888 标准币
huangyhg 向着好的方向发展
默认 用Win32SDK并发线程的问题。。。。。。。。

参考 MFC 关于 CWinThread 的源代码
huangyhg离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
旧 2007-03-25, 11:41 AM   #2
huangyhg
超级版主
 
huangyhg的头像
 
注册日期: 04-03
帖子: 18592
精华: 36
现金: 249466 标准币
资产: 1080358888 标准币
huangyhg 向着好的方向发展
默认 回复: 用Win32SDK并发线程的问题。。。。。。。。

线程的运行状态

1。线程正常情况下只有两种运行状态:running和exited。
2。如果想让线成退出,给线程状态位置THREAD_EXIT,如果线程已经退出,
则此标志位为THREAD_EXITED
3。如果线程已经运行,应该对标识位置THREAD_RUNNING
4。在线程运行过程中,应对线程标志位作出判断,如果为THREAD_EXIT,
应该修改标识位为THREAD_EXITED,然后return
5。如果一个现成还没有开始运行,则标志位为THREAD_NONE
****************************************************************/
const unsigned char THREAD_EXIT = 0;
const unsigned char THREAD_EXITED = 1;
const unsigned char THREAD_NONE = 2;
const unsigned char THREAD_RUNNING = 3;

const unsigned short THREAD_EXIT_LIMIT = 500; //等待线程退出的时间上限
const unsigned short THREAD_PERIOD = 20;

/****************************************************************
用户自己可以控制运行与中止的线程结构。
考虑到Scada程序中非常多的用到了多线程技术,就封装了线程处理方面的
数据和函数,让用户自己可以操作线程是否退出。
备注:如果一个程序退出的时候没有停止正在运行的线程,会产生内存泄漏!

使用参考:
THREAD m_thread; //定义一个线程

//定义线程所要处理的的函数,注意,此处不要有死循环,否则线成退出将失败
UINT ThreadProc(LPVOID lpParameter)
{
return TRUE;
}

//初始化线程
ThreadInit(&m_thread,ThreadProc,NULL,0,"线程使用示例");
//开启线程,线程开始后会一直运行,直到用户中止它!
ThreadBegin(&m_thread);
//退出线程
ThreadExit(&m_thread);

****************************************************************/
typedef struct tagTHREAD
{
char m_pszName[NAME_MAX_LEN];
UINT (*m_pfThreadProc)(LPVOID lpParameter);
LPVOID m_lpParameter;

UINT m_nThreadStatus;
HANDLE m_hThread;
UINT m_nExitTimeLimit;
}THREAD,*LPTHREAD;
__________________
借用达朗贝尔的名言:前进吧,你会得到信心!
[url="http://www.dimcax.com"]几何尺寸与公差标准[/url]
huangyhg离线中   回复时引用此帖
旧 2007-03-25, 11:42 AM   #3
huangyhg
超级版主
 
huangyhg的头像
 
注册日期: 04-03
帖子: 18592
精华: 36
现金: 249466 标准币
资产: 1080358888 标准币
huangyhg 向着好的方向发展
默认 回复: 用Win32SDK并发线程的问题。。。。。。。。

REALDB_API void ThreadInit(THREAD* lpThread,UINT (*m_pfThreadProc)(LPVOID),
LPVOID m_lpParameter,UINT nExitTimeLimit,char* pszThreadName)
{
ASSERT (lpThread != NULL);

lpThread->m_pfThreadProc = m_pfThreadProc;
lpThread->m_lpParameter = m_lpParameter;

if (nExitTimeLimit >= 10)
lpThread->m_nExitTimeLimit = nExitTimeLimit;
else
lpThread->m_nExitTimeLimit = THREAD_EXIT_LIMIT;

strcpy(lpThread->m_pszName ,pszThreadName);
lpThread->m_nThreadStatus = THREAD_NONE;
lpThread->m_hThread = NULL;
}

DWORD WINAPI ThreadRun(LPVOID lpParameter)
{
THREAD* lpThread = (THREAD*)lpParameter;
lpThread->m_nThreadStatus = THREAD_RUNNING;
while (TRUE)
{
if (lpThread->m_pfThreadProc == NULL ||
lpThread->m_nThreadStatus == THREAD_EXIT)
break;
else
{
(*(lpThread->m_pfThreadProc))(lpThread->m_lpParameter);
}
Sleep(THREAD_PERIOD);
}
lpThread->m_nThreadStatus = THREAD_EXITED;
lpThread->m_hThread = NULL;
return TRUE;
}

REALDB_API BOOL ThreadBegin(THREAD* lpThread)
{
ASSERT (lpThread != NULL);
DWORD dwThreadID;
lpThread->m_hThread = CreateThread(NULL,0,ThreadRun,
lpThread,0,&dwThreadID);
ASSERT (lpThread->m_hThread != NULL);
return TRUE;
}


REALDB_API BOOL ThreadExit(THREAD* lpThread)
{
ASSERT (lpThread != NULL);

if (lpThread->m_hThread != NULL && lpThread->m_nThreadStatus == THREAD_RUNNING)
{
lpThread->m_nThreadStatus = THREAD_EXIT;
UINT nTimePassed = 0;
while (lpThread->m_nThreadStatus != THREAD_EXITED)
{
Sleep (THREAD_PERIOD);
nTimePassed += THREAD_PERIOD;
if (nTimePassed >= lpThread->m_nExitTimeLimit )
{
LOG ("Error: %s退出超时!",lpThread->m_pszName );
ASSERT (FALSE);
break; //超时了就不等线成退出了
}
}
LOG ("Message: %s退出!",lpThread->m_pszName );
lpThread->m_nThreadStatus = THREAD_EXITED;
lpThread->m_hThread = NULL;
}
return TRUE;
}
__________________
借用达朗贝尔的名言:前进吧,你会得到信心!
[url="http://www.dimcax.com"]几何尺寸与公差标准[/url]
huangyhg离线中   回复时引用此帖
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 04:06 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多