多线程问题 线程只能运行一次 我苦恼了很长时间不得其解 源码附内 大家请帮帮忙

「已注销」 2001-06-06 06:00:00
加精
_fastcall TMyThread::TMyThread(void):TThread(true)
{
FreeOnTerminate=true;
Resume();
} //声明线程


声明线程 没错吧

void __fastcall TConfigw::autosearchClick(TObject *Sender)
{
MyThread=new TMyThread;
//MyThread->FreeOnTerminate=true;
autosearch->Enabled=false;
}

启动线程 没错吧

MyThread->Terminate();
Configw->lsearch->Caption="资源搜索结束";
bstop=true;//可以停止了
autosearch->Enabled=true;
//停止搜索 因为资料不全 无法做到完全停止 2001-3-2 yqf

中止线程 难道问题出在这里

运行一次总是不能再运行第二次 如果中途终止了 下次启动会继续接着上次的结果运行



时间有点紧 大家多多帮帮忙吧

如果我问题说得不清楚 还需要哪部分代码 请说
...全文
1488 73 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
73 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangdie 2001-08-07
  • 打赏
  • 举报
回复

学习学习
「已注销」 2001-06-21
  • 打赏
  • 举报
回复
春阳版主

还行么……

多谢你帮了我的大忙啊……

还有各位

再点名表扬老良……

我又发了个贴子
http://www.csdn.net/expert/topic/166/166636.shtm

大家可到那再领分

我答应过大家要狠狠加分的

┏━┯━┓
┃楓 葉┃
┠ ◆ ┨
┃印 秋┃
┗━┷━┛
xycleo 2001-06-13
  • 打赏
  • 举报
回复
葉老大我找你
「已注销」 2001-06-13
  • 打赏
  • 举报
回复
推一推

让更多朋友学习一下

@_@
  • 打赏
  • 举报
回复
向老大们学习。
线程啊,线程....
如果多一些try catch 呢?
这两天我做了个自己的Trace Window,呵呵。
「已注销」 2001-06-10
  • 打赏
  • 举报
回复
关键是设置条件退出这个循环

对么
「已注销」 2001-06-09
  • 打赏
  • 举报
回复
正宗的BCB呀

@_@
baikaishui 2001-06-09
  • 打赏
  • 举报
回复
天啦,看了那么多,我竟连程序是什么语言编写的都不知道!
robin_wan 2001-06-09
  • 打赏
  • 举报
回复
同意igame(igame) 的观点。
以前我也遇到过
“在线程的EXECUTE过程中应该是个循环”is right!!!
robin_wan 2001-06-09
  • 打赏
  • 举报
回复
belecyrus 2001-06-08
  • 打赏
  • 举报
回复
我昨天是试了一个下午都没结果,唉!学习学习再学习呀.
igame 2001-06-08
  • 打赏
  • 举报
回复
在线程的EXECUTE过程中应该是个循环,这样的话,不会只运行一次啦
以前我也遇到过
比如:
int i;
void ThreadExecute()
{
i++;
}
结果线程就只运行一次
但是
void ThreadExecute()
{
while(1)
i++;
}
就会不停的运行
试试看

孩皮妞野 2001-06-08
  • 打赏
  • 举报
回复
你的程序相互之间联系太紧,除错起来可能比较麻烦。多线程又尤其难调。

其实从你的需求来看似乎并不是非用多线程不可, 不如用ProcessMessage, 你马上就可以搞定了。
「已注销」 2001-06-08
  • 打赏
  • 举报
回复
ALNG

采用多线程的缘故是我想在搜索的时候不想让程序呈假死状态

我想在搜索的时候可以允许用户干点别的啊

硬盘一阵狂响

而主程序假死了 我觉着很不爽……

不是结合太紧

是我当初没为多线程考虑太多啊……

结果导致这些麻烦


to 春阳并TR@SE(排名不分先后)

这个贴子先不结

等我忙完了这几天

好好研究一下

再结

春阳版主的算法写得比较精致

至少我这么认为

我想再仔细看一看……
「已注销」 2001-06-07
  • 打赏
  • 举报
回复
………… if(pList->Count==0)
Terminate();
春阳版主 这句有问题

这段程序给我的第一感觉是速度快了

我以为是用了变量的原故

后来我思考再三 觉着这句有问题

也就是说发现一个空目录就马上终止了

对吗

而这个时候还有很多非空目录

可能还没搜索到
TR@SOE 2001-06-07
  • 打赏
  • 举报
回复
void __fastcall YaoThread::Execute(void)
{
while (!Terminated)
{
status=(status+1)%2;
// Sleep(100);
Synchronize(VisualSet);
}
}

void __fastcall YaoThread::VisualSet()
{
if(status==1)
YaoImage->Picture->LoadFromFile("yangyao.bmp");
else
YaoImage->Picture->LoadFromFile("yinyao.bmp");

}

class YaoThread : public TThread
{
private:
int status; //indicates Yin or Yang
int Indicator; //which YaoImage it is tracking
TImage *YaoImage;
void __fastcall VisualSet();
protected:
void __fastcall Execute(void);
public:
YaoThread();
YaoThread(int YaoIndicator, TImage *aImage);
int GetStatus()
{
return status;
}
void SetIndicator(int aNumber, TImage *aImage)
{
Indicator=aNumber;
YaoImage=aImage;
}
};

我一般用类变量。而外部用到的变量用指针传进去。
Wingsun 2001-06-07
  • 打赏
  • 举报
回复
只能象我写的那个程序那样写了,通过类的成员来传递了。
「已注销」 2001-06-07
  • 打赏
  • 举报
回复
能不能返回值呢

能返回值也很棒啊

我现在已经改写了很多代码了

写到这个地方觉着不能返回值就太逊了
「已注销」 2001-06-07
  • 打赏
  • 举报
回复
这种调用又怎么返回参数呢

总不能都用全局变量吧
Wingsun 2001-06-07
  • 打赏
  • 举报
回复
根据Synchronize的定义,这个是不能传入参数的。

不是我不想啊,我也很想能传入参数,可是borland不肯啊。。。。
加载更多回复(53)

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧