gcc 4.7.2
c89
您好,
我正在尝试停止在工作线程内运行的事件循环。
我用另一个函数的结构中的条件控制while循环。但是,价值似乎没有变化。它不会进入switch语句条件IMP_STATE_STOPPED,因此无法将条件设置为false以停止do..while循环。
imp结构是这样的:
enum states_e {IMP_STATE_STARTED, IMP_STATE_STOPPED};
struct imp_t {
states_e state;
};
这就是我所拥有的 - 只有基本片段:
工作线程函数与事件循环这将旋转,直到is_looping
变为false
static void* g_imp_evt_loop(apr_thread_t *thd, void *data)
{
imp_t *imp = NULL;
volatile apr_status_t is_looping = TRUE;
imp = (imp_t*)data;
if(!imp) {
return NULL;
}
printf("[ %p ]", imp);
#define SR_TIMEOUT 500
do {
if(waitevt(SR_TIMEOUT) >= 0) {
switch(imp->state) {
case IMP_STATE_STARTED:
{
/* do some work */
}
break;
case IMP_STATE_STOPPED:
is_looping = FALSE;
break;
}
apr_sleep(250000);
}
} while(is_looping);
return NULL;
}
这是我启动工作线程的片段,该线程从另一个函数调用:
void start_working(imp_t *imp)
{
printf("[ %p ]\n", imp);
if(apr_thread_pool_schedule(imp->module->thd_pool,
g_imp_evt_loop,
(void*)imp,
0, /* Start now */
NULL) != APR_SUCCESS) {
return FALSE;
}
}
在我的停止功能中,我将imp结构中的条件设置为IMP_STATE_STOPPED
。
void stop_working(imp_t *imp)
{
printf("[ %p ]\n", imp);
imp->state = IMP_STATE_STOPPED;
}
可能是数据是该工作线程函数的本地数据,我无法更改它吗?
我打印出每个函数中的地址,并且imp的所有adddress都相同,即0x923b710
非常感谢任何建议,