我有一个函数执行时间很长,在运行函数时程序无法响应,我想用多线程解决。思路是这样的:把这个函数放入一个线程执行,这个函数是执行一个循环,在这个循环里改变一个传入的全局变量的值,另外产生一个线程读这个全局变量的值,然后用一个进度条显示。我有几个问题不清楚:
1.在一个函数里的循环改变全局变量的值,另外一个线程能否及时读取它的值,例如函数:UINT display(UINT *current)
{
UINT i;
for (i=0;i<10000;i++)
*current=i;
return 0;
}
current是传入的一个全局变量,我在另外的线程能否读取它的值。
2.由于两个线程同时读取一个全局变量,如何进行同步?
解决一个问题50分。
1.在一个函数里的循环改变全局变量的值,另外一个线程能否及时读取它的值,例如函数:UINT display(UINT *current)
{
UINT i;
for (i=0;i<10000;i++)
*current=i;
return 0;
}
current是传入的一个全局变量,我在另外的线程能否读取它的值。
2.由于两个线程同时读取一个全局变量,如何进行同步?
解决一个问题50分。
解决方案 »
- 想开发一个内嵌IE控件可以实现全部IE功能的应用程序,请问有教程或者例子吗?多谢了!
- 求一个算法,应该是比较简单的,跪请高手指点,100分,在线等~~~~~~~~~
- 一个很迫切想知道 的问题@#####################################33
- 子窗口的创建(我分不多,不好意思)
- 请看这段代码!
- 关于写Driver的问题?不管你知道多少都可以进来说两句。
- 在公司局域网中,我想在客户机上控制服务器的ISDN的上网与断网,请问有什么样的软件可以用呢?
- 如何校验一个表达式的合法性?
- 如何使我从光盘copy到硬盘上的文件属性不为只读?
- MFC 的异常处理问题
- 高分请教
- 编译通过,连接错误,求助!
CCriticalSection crCurrent;//互斥UINT display(UINT *current)
{
UINT i;
for (i=0;i<10000;i++)
{
crCurrent.Lock();
*current=i;
crCurrent.Unlock();
eventCurrentChange.SetEvent();
}
return 0;
}另外一个线程while(eventCurrentChange.Lock())//等待事件发生(全局变量变化)
{
crCurrent.Lock();//访问全局变量
..//显示进度条
crCurrent.Unlock();
}2.如上,访问同一个变量的时候,用临界区crCurrent互斥,可以避免在写全局变量没有完成之前,另外一个线程读取这个变量。
同时读取不需要互斥
循环里面,加上这几句:MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}就行。
你说的我不大明白呀?
UINT display(UINT *current)
{
UINT i;
for (i=0;i<10000;i++)
{
*current=i;
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
{
UINT i;
for (i=0;i<10000;i++)
{
*current=i;
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
MSG msg;
for(;;)
{
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
...
}这样。
...
能给些这方面的资料吗?
能否先给分,我想先给你50分,问题解决后给完分再开帖给分。