Friday, January 26, 2007

各位帮忙看看:多线程,DLL返回消息

发信人: anzir (aa), 信区: MSDN
标 题: 各位帮忙看看:多线程,DLL返回消息
发信站: 水木社区 (Thu Jan 25 15:14:03 2007), 站内

【 以下文字转载自 VisualC 讨论区 】
发信人: anzir (aa), 信区: VisualC
标 题: 各位帮忙看看:多线程,DLL返回消息
发信站: 水木社区 (Thu Jan 25 15:13:32 2007), 站内

程序在CTestView中调用dll连接库中的函数进行长时间的处理,
打算每个一定时间从联结库的函数返回一个消息
但是不知道该怎么发消息
现在是采用多线程的方法
程序的大概流程如下
可是多线程函数直到动态连接库函数计算完成后才调用
不知道是因为多线程使用方法不对,还是因为这种方法根本不行


定义标志量
HANDLE hRunMutex;

多线程函数
void ProcessStatus(void *thrpara);

入口函数
void CTestView::TestFunc(char *spath, char *sext)
{
/////
long nproc = 0;
启动多线程
hRunMutex = CreateMutex( NULL, TRUE, NULL ); // Set
_beginthread(ProcessStatus, 0, &nproc);

开始调用DLL连接库函数,执行处理
CMyClass cls;
cls.DoLongTimeWork();

结束多线程
ReleaseMutex( hRunMutex );
CloseHandle( hRunMutex );
}

DLL中胡函数
void CMyClass::DoLongTimeWork()
{
long i;
for(i = 0; i < 10000; i ++)
{
//extensive computing.....
}
}

多线程回调函数
void ProcessStatus(void *thrpara)
{
while ( WaitForSingleObject( hRunMutex, 75L ) == WAIT_TIMEOUT );
{
SYSTEMTIME stime;
GetSystemTime(&stime);
TRACE("hello %d, %ld\n", stime.wMilliseconds, *(long *)thrpara);
}
}

--

※ 来源:·水木社区 http://newsmth.net·[FROM: 210.75.99.*]

[本篇全文] [本篇作者:whero] [进入讨论区] [返回顶部]2发信人: whero (月光族), 信区: MSDN
标 题: Re: 各位帮忙看看:多线程,DLL返回消息 (转载)
发信站: 水木社区 (Thu Jan 25 15:25:11 2007), 站内

ProcessStatus 上来会WaitForSingleObject,而那个mutex从你code看要longTimeWork
后才会释放,当然那个thread要计算完成后才干活。

【 在 anzir (aa) 的大作中提到: 】
: 标 题: 各位帮忙看看:多线程,DLL返回消息
: 发信站: 水木社区 (Thu Jan 25 15:14:03 2007), 站内
:
: 【 以下文字转载自 VisualC 讨论区 】
: 发信人: anzir (aa), 信区: VisualC
: 标 题: 各位帮忙看看:多线程,DLL返回消息
: 发信站: 水木社区 (Thu Jan 25 15:13:32 2007), 站内
:
: 程序在CTestView中调用dll连接库中的函数进行长时间的处理,
: 打算每个一定时间从联结库的函数返回一个消息
: 但是不知道该怎么发消息
: 现在是采用多线程的方法
: 程序的大概流程如下
: 可是多线程函数直到动态连接库函数计算完成后才调用
: 不知道是因为多线程使用方法不对,还是因为这种方法根本不行
:
:
: 定义标志量
: HANDLE hRunMutex;
:
: 多线程函数
: void ProcessStatus(void *thrpara);
:
: 入口函数
: void CTestView::TestFunc(char *spath, char *sext)
: {
: /////
: long nproc = 0;
: 启动多线程
: hRunMutex = CreateMutex( NULL, TRUE, NULL ); // Set
: _beginthread(ProcessStatus, 0, &nproc);
:
: 开始调用DLL连接库函数,执行处理
: CMyClass cls;
: cls.DoLongTimeWork();
:
: 结束多线程
: ReleaseMutex( hRunMutex );
: CloseHandle( hRunMutex );
: }
:
: DLL中胡函数
: void CMyClass::DoLongTimeWork()
: {
: long i;
: for(i = 0; i < 10000; i ++)
: {
: //extensive computing.....
: }
: }
:
: 多线程回调函数
: void ProcessStatus(void *thrpara)
: {
: while ( WaitForSingleObject( hRunMutex, 75L ) == WAIT_TIMEOUT );
: {
: SYSTEMTIME stime;
: GetSystemTime(&stime);
: TRACE("hello %d, %ld\n", stime.wMilliseconds, *(long *)thrpara);
: }
: }
:
: --
:
: ※ 来源:·水木社区 http://newsmth.net·[FROM: 210.75.99.*]


--

※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]

[本篇全文] [本篇作者:hleon] [进入讨论区] [返回顶部]3发信人: hleon (阿土仔(垚垚)), 信区: MSDN
标 题: Re: 各位帮忙看看:多线程,DLL返回消息 (转载)
发信站: 水木社区 (Thu Jan 25 16:04:37 2007), 站内

可是他的waitforsingleobject不是INFINITE呀

【 在 whero (月光族) 的大作中提到: 】
: ProcessStatus 上来会WaitForSingleObject,而那个mutex从你code看要longTimeWork
: 后才会释放,当然那个thread要计算完成后才干活。


--
天下风云出我辈,
一入江湖岁月催。
皇图霸业谈笑中,
不胜人生一场醉。


※ 来源:·水木社区 newsmth.net·[FROM: 58.185.111.*]

[本篇全文] [本篇作者:pseudocode] [进入讨论区] [返回顶部]4发信人: pseudocode (I can Run!), 信区: MSDN
标 题: Re: 各位帮忙看看:多线程,DLL返回消息 (转载)
发信站: 水木社区 (Thu Jan 25 18:19:39 2007), 站内

注意看他的while,多了个分号


多线程回调函数
void ProcessStatus(void *thrpara)
{
while ( WaitForSingleObject( hRunMutex, 75L ) == WAIT_TIMEOUT );
~~~~
{
SYSTEMTIME stime;
GetSystemTime(&stime);
TRACE("hello %d, %ld\n", stime.wMilliseconds, *(long *)thrpara);
}
}

--

【 在 hleon (阿土仔(垚垚)) 的大作中提到: 】
: 可是他的waitforsingleobject不是INFINITE呀

1 comment:

Anonymous said...

well.. it's like I said!