我在程序的主线程中定义了一个变量A。然后,调用函数将变量A传递(*1)给一个子线程进行计算,计算完以后我用SendMessage/PostMessage发送消息给主线程,修改变量A的值(*2),这是一个n次循环的过程。如果用SendMessage,请问需要在(*1)处使用同步变量吗?
如果用PostMessage,请问需要在(*1)处使用同步变量吗?我认为在使用SendMessage的时候需要使用同步变量,因为此时在子线程传值时,是子线程调用对A的附值操作,可能会和主线程的附值有冲突。
而使用PostMessage时,是发一个消息到主线程的消息队列中排队,因为(*1)和(*2)的附值一定有先后顺序,所以不需要用同步变量。希望大家能够一起帮我分析一下,谢谢
如果用PostMessage,请问需要在(*1)处使用同步变量吗?我认为在使用SendMessage的时候需要使用同步变量,因为此时在子线程传值时,是子线程调用对A的附值操作,可能会和主线程的附值有冲突。
而使用PostMessage时,是发一个消息到主线程的消息队列中排队,因为(*1)和(*2)的附值一定有先后顺序,所以不需要用同步变量。希望大家能够一起帮我分析一下,谢谢
PostMessage可不要同步,因为发完后就不管了
如果是这样,那不管是用Send还是Post,(*1)处都不需要保护吧,而(*2)处要保护起临界区啊。
如果发送一个消息后,消息放入主线程的消息队列,那么主线程对变量A的附值和子线程发送消息要求修改变量A的值都是在主线程中作的,所以就不需要做同步保护。
而PostMessage不需要返回
如果子线程发送一个消息到主线程,调用一个函数TDoSth2(),对于SendMessage()或PostMessage()发送消息以后,所调用的函数都是在主线程中执行的,我在函数TDoSth2()函数的第一行加入了GetCurrentThreadId()来取得先前线程的ID,对PostMessage()来说,TDoSth2是肯定在主线程的时间片中执行的。
但是对于SendMessage(),若主线程中有一个函数调用DoSth1(),那么TDoSth2()和函数DoSth1()是不是都在主线程的时间片中执行,并且两个函数有先后的顺序?
调用一个函数TDoSth2(), --> 谁调用 ?
对于SendMessage()或PostMessage()发送消息以后,所调用的函数都是在主线程中执行的, --> ?
我在函数TDoSth2()函数的第一行加入了GetCurrentThreadId()来取得先前线程的ID,
对PostMessage()来说,TDoSth2是肯定在主线程的时间片中执行的。 --> ?
但是对于SendMessage(),若主线程中有一个函数调用DoSth1(),那么TDoSth2()和函数DoSth1()是不是都在主线程的时间片中执行,并且两个函数有先后的顺序? --> ?