你记着给我加分!
Tmr(P).v := 10;
//mr.v := 10;
这一句和上面的那一句有什么区别?
这两句的区别在于
第一句是把P指针变成TMR类型,再给它的成员v赋值。
第二句当然就是直接给mr的v赋值了。
你说这两句有没有区别?当然是天大的区别!
你在整个程序上犯了个概念上的大错误(与线程无关)
P指针通常强制变换应该是32位的类型。如果要达到你想要的效果,
应该均为指针类型变换才行,可你把它当成值变换了。
正确的是
第一:
thrd := CreateThread(nil, 0, @threadfunc, Pointer(mr), 0, id);
改为
thrd := CreateThread(nil, 0, @threadfunc, Pointer(@mr), 0, id);
第二:
Tmr(P).v := 10;
改为
PTMR(P).v := 10
其中PTMR = ^TMR;
所以说你要一个问题一个问题解决,否则冒出其他N多无关问题,还以为是线程问题!