|

楼主 |
发表于 2009-10-20 09:49:11
|
显示全部楼层
重新写代码做了一下实验,发现问题更奇怪了。
代码: - program Test;
- uses Windows;
- var MSG: TMSG; EventHandle, ThreadHandle: Handle;
- function Thread(Param: Pointer): Longint;
- begin
-   while True do
-   begin
-       WaitForSingleObject(EventHandle, 10000);
-   end;
- end;
- begin
-   EventHandle:= CreateEvent(nil, False, False, nil);
-   ThreadHandle:= [color=#FF0000]BeginThread(@Thread); [/color]
-   while (GetMessage(MSG, nil, 0, 0))
-     {
-         TranslateMessage(MSG);
-         DispatchMessage(MSG);
-     }
- end;
复制代码
这样写的程序运行完全正常,不管怎样操作,都不会造成影响。
然而改成这样就不行了:
代码: - program Test;
- uses Windows;
- var MSG: TMSG; EventHandle, ThreadHandle: Handle; ThreadID: DWORD;
- function Thread(Param: Pointer): Longint;
- begin
-   while True do
-   begin
-       WaitForSingleObject(EventHandle, 10000);
-   end;
- end;
- begin
-   EventHandle:= CreateEvent(nil, False, False, nil);
-   ThreadHandle:= [color=#FF0000]CreateThread(nil, 0, @Thread, nil, 0, ThreadID); [/color]
-   while (GetMessage(MSG, nil, 0, 0))
-     {
-         TranslateMessage(MSG);
-         DispatchMessage(MSG);
-     }
- end;
复制代码
这样是不行的,或者改成这样:
代码: - program Test;
- uses Windows;
- var MSG: TMSG; EventHandle, ThreadHandle: Handle;
- function Thread(Param: Pointer): Longint;
- begin
-   while True do
-   begin
-       WaitForSingleObject(EventHandle, 10000);
-   end;
- end;
- [color=#FF0000]procedure StartThread;
- begin
-   ThreadHandle:= BeginThread(@Thread);
- end; [/color]
- begin
-   EventHandle:= CreateEvent(nil, False, False, nil);
-   [color=#FF0000]StartThread; [/color]
-   while (GetMessage(MSG, nil, 0, 0))
-     {
-         TranslateMessage(MSG);
-         DispatchMessage(MSG);
-     }
- end;
复制代码
这样也是不行的,也就是说Lazarus是不能用来做项目的,白浪费了我的时间。
我测试的手机配置:CPU: K3 360MHz,Memory 128M
另外,这三段程序不是直接从程序中拷过来的(在家了,没带来),临时写在帖子上的,只为表达清楚含义或用法,所以有可能有格式上或拼写上的错误,请不要认为实际的程序也是这样(肯定编译不过去)。 |
|