我正在使用TThread,我只需要找出线程是否仍在运行并终止应用程序(如果需要很长时间).
例如:
MyThread := TMyThread.Create;
MyThread .Resume;
MyThread.Terminate;
total := 0;
while MyThread.isRunning = true do // < i need something like this
begin
// show message to user to wait a little longer we are still doing stuff
sleep(1000);
total := total + 1000;
if total > 60000 then
exit;
end;
Run Code Online (Sandbox Code Playgroud)
Delphi有可能吗?
考虑到我希望能够将用户保存到数据库,我的添加操作如下:
public function addAction()
{
$form = new UserForm();
$form->get('submit')->setValue('Add');
$request = $this->getRequest();
if ($request->isPost()) {
$userFilter = new UserFilter();
$form->setInputFilter( $userFilter->getInputFilter() );
$form->setData( $request->getPost() );
if ($form->isValid())
$user = new User();
$user->setEmail($form->getInputFilter()->getValue('email') );
$user->setNome( $form->getInputFilter()->getValue('name') );
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$em->persist($user);
$em->flush();
return $this->redirect()->toRoute('user');
}
}
return array('form' => $form);
}
Run Code Online (Sandbox Code Playgroud)
很容易将用户保存到数据库,但是如果我需要添加一些复杂的业务逻辑,那么我想检查电子邮件是否是唯一的,并且我还想访问一些Web服务来检查生命的终极问题的答案,宇宙,一切都是42,如果是真的我想将用户保存到数据库,如果不是我想向用户显示一条消息.
它可以完成添加操作但是我告诉这不是一个很好的做法,我可以把这个业务逻辑放在实体User中,但是这会在实体中添加zf2和doctrine之间的耦合,这也很糟糕.在网上搜索解决方案,答案似乎是将业务逻辑放在服务层中.
通过使用服务层解决方案,可以创建一个UserBusinessLogic类并创建一个方法save,它将执行业务逻辑并在一切正常时保存用户.
这听起来不错吗?有关于这个问题的文件吗?也许是一个代码示例,展示了如何使用doctrine 2和zf2以及服务来处理业务逻辑.
我想底线是:在使用zf2和doctrine 2时,将业务逻辑放在哪里的最佳做法是什么?
假设服务解决方案是最好的方法.如果我有实体用户,组以及这两者之间的关系,我会创建一个名为"access"的服务,这个服务将是从控制器接收数据以保存用户组,链接那些2并执行任何其他任务的服务.发送邮件以重置用户密码.这听起来不错吗?
考虑代码:
class UPDServer {
//start listener
public void start() {
UdpClient listener = new UdpClient(this._porta);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 10000);
State s = new State();
s.listener = listener;
s.ipEndPoint = ipEndPoint;
// begin to listen again
listener.BeginReceive(new AsyncCallback(ReceiveCallback), s);
}
//receive data
public void ReceiveCallback(IAsyncResult ar)
{
// we got data
State s = (State)(ar.AsyncState);
Byte[] received = e.escuta.EndReceive(ar, ref e.ipEndPoint);
string text = ""; = Encoding.ASCII.GetString(received);
// ... do somenthing with text
// begin to listen again
s.listener.BeginReceive(new …Run Code Online (Sandbox Code Playgroud)