线程中无法正常解释的情况,哪位高手能给点提示啊

线程中无法正常解释的情况,谁能给点提示啊?
int unGzip(char* source, int len, char* des)
{
EnterCriticalSection(&g_cs);
int ret,have,offset=0;
z_stream d_stream;
Byte compr[segment_size]={0}, uncompr[segment_size*4]={0};
memcpy(compr,(Byte*)source,segment_size);
uLong comprLen, uncomprLen;
comprLen = segment_size;//一开始写成了comprlen=sizeof(compr)以及comprlen=strlen(compr),后来发现都不对。
//sizeof(compr)永远都是segment_size,显然不对,strlen(compr)也是不对的,因为strlen只算到\0之前,
//但是gzip或者zlib数据里\0很多。
uncomprLen = segment_size*4;
strcpy((char*)uncompr, "garbage");

d_stream.zalloc = Z_NULL;
d_stream.zfree = Z_NULL;
d_stream.opaque = Z_NULL;

d_stream.next_in = Z_NULL;//inflateInit和inflateInit2都必须初始化next_in和avail_in
d_stream.avail_in = 0;//deflateInit和deflateInit2则不用

ret = inflateInit2(&d_stream,47);
if(ret!=Z_OK)
{
AfxMessageBox("inflateInit2 error");
return ret;
}
d_stream.next_in=compr;
d_stream.avail_in=comprLen;
offset = 0;
do
{
d_stream.next_out=uncompr;
d_stream.avail_out=uncomprLen;
ret = inflate(&d_stream,Z_NO_FLUSH);
ASSERT(ret != Z_STREAM_ERROR);
switch (ret)
{
case Z_NEED_DICT:
ret = Z_DATA_ERROR;   
case Z_DATA_ERROR:
case Z_MEM_ERROR:
(void)inflateEnd(&d_stream);
return ret;
}
have=uncomprLen-d_stream.avail_out;

memcpy(des+offset,uncompr,have);//这里一开始我写成了memcpy(des+offset,d_stream.next_out,have);
offset+=have;
}while(d_stream.avail_out==0);
inflateEnd(&d_stream);
memcpy(des+offset,"\0",1);
LeaveCriticalSection(&g_cs);
return ret;
}


上面这是个全局函数,在计时器响应函数OnTimer中调用,而且是多线程,每个线程中都有一个计时器,然后奇怪的现象就是断点调试运行中,我发现offset这个临时变量每次的初始值并不都是0,虽然我还特意两次给这个变量赋0值,不过有的时候是正常的,所以我实在是想不出来为什么了,请教各位大神了。
------最佳解决方案--------------------
没看到你线程的消息循环嘛。

你自己建的线程消息循环要自己补上的
------其他解决方案--------------------
引用:
C/C++ code??



12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

int unGzip(char* source, int len, char* des) {     EnterCriticalSection(&am……

你是多线程,线程间切换了以后你看到的的offset的值吧~
------其他解决方案--------------------
引用:
C/C++ code??12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455int unGzip(char* source, int len, char* des){    EnterCriticalSection(&amp……


线程消息循环? 线程需要有消息循环? 怎么搞? 没接触过啊
------其他解决方案--------------------
引用:
你是多线程,线程间切换了以后你看到的的offset的值吧~


你的意思是指这是因为线程切换的缘故吗? 不太懂额,反正调试的时候总是在这里出错。
------其他解决方案--------------------
引用:
没看到你线程的消息循环嘛。

你自己建的线程消息循环要自己补上的


线程消息循环? 线程需要有消息循环? 怎么搞? 没接触过啊
------其他解决方案--------------------