“在可以运行的计算机上编译后,复制到那台计算机上,照样可以运行正常。只是在不可以运行的计算机上编译后就不可以运行了”
我觉得倒正说明了原因就在于系统、电脑的不同。同样的源代码,编译生成的EXE内容按理说应该是一样的(?),你可以用个文件比较工具把在两台电脑上编译生成的EXE比较一下,看看内容是否完全一致。两台电脑的CPU各是什么?CPU厂家、品牌、型号不同,也许有可能运行结果会有些差异吧。
不过还是建议用SendMessage发送消息来进行同步,说实话,我也发现Synchronize同步机制是有一定的问题的,不过是在主线程释放线程对象调用WaitFor时:
同步处理Synchroize中,WakeMainThread是PostMessage(Handle, WM_NULL, 0, 0);
而WaitFor函数中,WaitResult := MsgWaitForMultipleObjects(2, H, False, 1000, QS_SENDMESSAGE);
一个是PostMessage,一个是只会在SendMessage发送消息过来时才会返回(QS_SENDMESSAGE),这样同步处理时主线程没有给唤醒,就不能处理线程同步过程,而Synchronize也因为WaitForSingleObject(SyncProc.Signal, INFINITE)被挂起啦