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 ie都是相同的0x923b710
非常感谢您的任何建议,