问个多线程的问题,如何在一个线程中定时的做一件事?(20分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
问个多线程的问题,如何在一个线程中定时的做一件事?
我想在一个程序中使用多线程,一个线程定时从另外一台机器读数据,一个线程将接收
的数据定时的画到chart上。不知道这个”定时“在线程中是如何实现的?
另外我画到chart上的线程也许会被创建多次,因为有可能创建多个画chart的窗体,这样
也就创建了多个线程,我想知道这些”相同“的线程会不会冲突?
 
可以sleep休眠线程
或者用timer触发线程
 
每个thread用timer,画的时候用synchronize。
 
可以在工作线程中建立消息循环(用GetMessage和PostThreadMessage)
然后用timer定时给线程发消息。
另外,只有<red>多</red>线程(当然包括主线程在内)访问(主要是写)<red>共享</red>
数据时才有线程同步问题。
 
用内核对象!
 
用timer来定时创建线程?我就是因为timer不准才要用线程的啊。如果是用timer创建线程
那和我在timer里直接写接收数据的代码有什么区别啊?
天真,你说用内核对象?能否说得清楚一些?
 
在Form中
hnd : THANDLE;所有单元都要用到的公用变量
hnd := CreateEvent(NULL,False,False,NULL);
在画的线程中
aa: DWORD;
aa := WaitForSingleObject(hnd,INFINITE);
if aa= WAIT_OBJECT_0 then
begin
....画图
end;

在接收的线程中
if 接收完毕 then

setEvent(hnd);//这儿将去触发画的线程中画图的那个过程
最后别忘了在程序关闭时
CloseHandle(hnd);
 
还是这个问题:
用timer来定时创建线程?我就是因为timer不准才要用线程的啊。如果是用timer创建线程
那和我在timer里直接写接收数据的代码有什么区别啊?
 
晕,你接收线程也定时创建?
你不会一直在等待呀,
等待是否有流过来!
如果有流就接收呀!
就跟UDP一样呀!
 
哦,那意思就是说我创建一个线程就一直接收数据。哦,还不行,因为我接收数据定的规则
是必须我先发给对方一个命令他才回给我数据,所以我要做的是“定时”,不是定时创建
线程,而是在线程里定时的发命令。
 
为什么TIMER不准?
如果是说自动主动向别人要数据的话那就用吧!
 
哦,我试试。其实是我思维陷入了一个误区:)
对了,天真,那用timer的意思就是说我的线程是定时创建的,那和我直接用timer有什么
区别吗?好象没体现出线程的优势啊。
很感谢你的帮助,能把qq号留下吗。
 
呵呵没什么的
44868052
 
其实不用线程也没关系,
不用得了你这个地方也不是特别用得到线程的!
 
不行,还得用,因为怕到时候别的事情会耽误通信。
另外如果用timer定时创建线程那根本体现不出线程的优点啊。如果我在另外的事件里做个
死循环,那timer根本就不响应了。
有什么好的办法吗?
 
多人接受答案了。
 
后退
顶部