首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

线程中使用窗口控件的有关问题

2012-02-20 
线程中使用窗口控件的问题我的线程和form都在同一个pas中。form中有一个mscomm控件。我在这个pas中定义了很

线程中使用窗口控件的问题
我的线程和form都在同一个pas中。

form中有一个mscomm控件。我在这个pas中定义了很多类似下面的函数:
procedure   CtrlUp();
begin
    //抬针
    SetControl($FF,C_UP,False);
    WaitForSampleCtrlStatus(csUp);
end;
procedure   CtrlDown();
begin                    
    //放针
    SetControl($FF,C_DOWN,False);
    WaitForSampleCtrlStatus(csDown);
end;
procedure   CtrlReset();
begin
    //复位
    SetControl($FF,C_RESET,False);
    WaitForSampleCtrlStatus(csReset);
end;
……
其中SetControl中使用了form.mscomm。

那么,我的问题是,上面那些函数,我是否可以在线程中直接使用???


[解决办法]
应该没问题,你可以试一试,不过调用的时候要用
Synchronize(CtrlReset);
[解决办法]
主线程中可以直接执行线程忠的方法,如上所示,用序列化来显示执行结果.
[解决办法]
Synchronize(CtrlTurntable(FTurntableIndex));
Synchronize里面的函数不能带参数!
[解决办法]
procedure DoCtrlTurntable;
begin
CtrlTurntable(FTurntableIndex);
end;
constructor TAutoThread.Create(cn : string;ti,ci : integer);
begin
FCasesNo := cn;
FTurntableIndex := ti;
FChannelIndex := ci;
inherited Create(False);
end;
procedure TAutoThread.Execute;
begin
//执行完毕自动释放
FreeOnTerminate := True;
//首先
EnterCriticalSection(csCtrl);
try
//
Synchronize(DOCtrlTurntable);
finally
LeaveCriticalSection(csCtrl);
end;
end;

[解决办法]
线程使用简介:
=======================================================
线程创建和执行
create();
Execute;

线程终止
FreeOnTerminate;
OnTerminate;
Terminated;
Terminate;

与VCL同步
Synchronize();
消息

优先级
Priority;

挂起和唤醒
Suspend;
Resume;

测试线程时间
GetThreadTimes();

线程局部变量
threadvar

线程同步
1.临界区
CS: TRTLCriticalSection;
InitializeCriticalSection(CS);
EnterCriticalSection(CS);
LeaveCriticalSection(CS);
DeleteCriticalSection(CS);
2.互斥
hMutex: THandle = 0;
hMutex := CreateMutex(nil, False, nil);
if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
ReleaseMutex(hMutex);
CloseHandle(hMutex);
3.信号量
hSem: THandle = 0;
hSem := CreateSemaphore(nil, 1, 1, nil);
if WaitForSingleObject(hSem, INFINITE)= WAIT_OBJECT_0 then
ReleaseSemaphore(hSem, 1, nil);
CloseHandle(hSem);
4.事件

热点排行